Python实现多线程调用GDAL执行正射校正
python实现多线程参考http://www.runoob.com/python/python-multithreading.html
#!/usr/bin/env python
# coding:utf-8
#
# Description:
#
#
# Author: LC
# Date:
#
try:
from osgeo import gdal
except ImportError:
import gdal import Queue
import threading
import time
import os
import osr
import tarfile
import math exitFlag = 0 # 自定义多线程类
class myThread(threading.Thread):
def __init__(self, threadID, name, queueLock, workQueue, outputdir, demfile):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.queueLock = queueLock
self.workQueue = workQueue
self.outputdir = outputdir
self.demfile = demfile def run(self):
print "Starting " + self.name
GF4_Ortho(self.name, self.queueLock, self.workQueue, self.outputdir, self.demfile)
print "Exiting " + self.name def GF4_Ortho(threadName, queueLock, workQueue, outputdir, demfile):
while not exitFlag:
queueLock.acquire()
if not workQueue.empty():
untarfile = workQueue.get()
queueLock.release()
print "%s processing %s" % (threadName, untarfile) # 解压
t = tarfile.open(untarfile)
outdir_ = outputdir + os.path.sep + ((os.path.basename(untarfile)).split(".tar"))[0]
t.extractall(path = outdir_) # 计算UTM区号
filename = ((os.path.basename(untarfile)).split('.tar'))[0]
lon = float(((filename.split('_'))[2])[1:])
zone_ = int(math.ceil(lon / 6)) + 30
zone = int("" + str(zone_))
print zone # 正射校正
filename_ = filename.split('_')
filename_[1] = 'PMS'
infile = outdir_ + os.path.sep + '_'.join(filename_) + '.tiff'
outfile = outdir_ + os.path.sep + '_'.join(filename_) + '_Ortho.tiff'
if os.path.exists(infile):
dataset = gdal.Open(infile)
dstSRS = osr.SpatialReference()
dstSRS.ImportFromEPSG(zone)
ret = gdal.Warp(outfile, dataset, format="Gtiff", xRes=50, yRes=50, dstSRS=dstSRS, rpc=True,
transformerOptions=demfile) del t, infile, outfile, dataset, ret
else:
queueLock.release()
time.sleep(1) def main(inputdir, outputdir, demfile, thread_number): # 查找待处理压缩文件
names = os.listdir(inputdir)
filenames = []
for name_ in names:
filenames.append(inputdir + os.path.sep + name_)
num = len(filenames) threadList = []
for i in range(thread_number):
threadList.append("Thread-" + str(i))
queueLock = threading.Lock()
workQueue = Queue.Queue(num)
threads = []
threadID = 1 # 创建新线程
for tName in threadList:
thread = myThread(threadID, tName, queueLock, workQueue, outputdir, demfile)
thread.start()
threads.append(thread)
threadID += 1 # 填充队列
queueLock.acquire()
for name in filenames:
workQueue.put(name)
queueLock.release() # 等待队列清空
while not workQueue.empty():
pass # 通知线程是时候退出
exitFlag = 1 # 等待所有线程完成
for t in threads:
t.join()
print "Exiting Main Thread" if __name__ == "__main__": indir = "H:\\GF-4\\2016-05-22\\"
outdir = "G:\\Temp\\GF-4\\"
demfile = "C:\\Program Files\\Exelis\\ENVI53\data\\GMTED2010.jp2"
thread_num = 6 starttime = time.ctime()
main(indir, outdir, demfile, thread_num)
endtime = time.ctime() print "Start time:", starttime
print "End time:", endtime
Python实现多线程调用GDAL执行正射校正的更多相关文章
- PIE SDK正射校正
1. 算法功能简介 正射校正是对影像空间和几何畸变进行校正生成多中心投影平面正射图像的处理过程.它除了能纠正一般系统因素产生的几何畸变外,还可以消除地形引起的几何畸变 PIE支持算法功能的执行,下面对 ...
- 基于GPU的高分一号影像正射校正的设计与实现
一 RPC正射校正的原理 影像正射校正的方法有很多,主要包含两大类:一类是严格的几何纠正模型,另一类是近似几何纠正模型.当遥感影像的成像模型和有关参数已知时,可以根据严格的成像模型来校正图像,这种方法 ...
- python 函数的调用 和执行 小知识
1.符号表 执行一个函数会引入一个用于函数的局部变量的新符号表. 更确切地说, 函数中的所有的赋值都是将值存储在局部符号表: 而变量引用首先查找局部符号表, 然后是上层函数的局部符号表, 然后是全局符 ...
- python实现异步调用函数执行
在实现异步调用之前我们先进行什么是同步调用和异步调用 同步:是指完成事务的逻辑,先执行第一个事务,如果阻塞了,会一直等待,直到这个事务完成,再执行第二个事务,顺序执行 异步:是和同步相对的,异步是指在 ...
- java调用Linux执行Python爬虫,并将数据存储到elasticsearch--(环境脚本搭建)
java调用Linux执行Python爬虫,并将数据存储到elasticsearch中 一.以下博客代码使用的开发工具及环境如下: 1.idea: 2.jdk:1.8 3.elasticsearch: ...
- django系列5.4--ORM中执行原生SQL语句, Python脚本中调用django环境
ORM执行原生sql语句 在模型查询API不够用的情况下,我们还可以使用原始的SQL语句进行查询. Django 提供两种方法使用原始SQL进行查询:一种是使用raw()方法,进行原始SQL查询并返回 ...
- python 的多线程执行速度
python 的多线程有点鸡肋,适用场景有局限,单位时间多个核只能跑一个线程. 有泳池一个,四个泵,但只有一个人,一人只能开启管理着其中一个,所以四个泵没什么用.但是,如果泵的工作时间与冷却恢复时间是 ...
- python网络-多线程(22)
一.什么是线程 线程(英语:thread)是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.同一进程中的多条线程将共享该进程中的全部系统资源,一个进程可以有很多线程,每 ...
- Python的多线程(threading)与多进程(multiprocessing )
进程:程序的一次执行(程序载入内存,系统分配资源运行).每个进程有自己的内存空间,数据栈等,进程之间可以进行通讯,但是不能共享信息. 线程:所有的线程运行在同一个进程中,共享相同的运行环境.每个独立的 ...
随机推荐
- laravel 还原项目到正常状态
首先回滚数据库迁移: $ php artisan migrate:rollback 还原修改文件到原始状态: $ git checkout . 查看文件修改状态: $ git status 可以看出剩 ...
- .NET中的StringBuilder
为什么要使用StringBuilder 为什么使用StringBuilder要从string对象的特性说起. string对象在进行字符串拼接时,因为字符串的不可变性,string对象会每次拼接,都会 ...
- Classloader精简重点
如果想学习classloader的具体内容,请goodu JVM 在运行时会产生三个ClassLoader,Bootstrap ClassLoader.Extension ClassLoader和 A ...
- PIL库的总结及运用
PIL库的总结:(以代码形式) #date: 2018/11/15 from PIL import Image,ImageFilter,ImageDraw,ImageFont #####除了缩略图的方 ...
- 删除排序数组中的重复项-leetcode-26
public: int removeDuplicates(vector<int>& nums) { int size=nums.size(); i ...
- 连接管理 与 Netty 心跳机制
一.前言 踏踏实实,动手去做,talk is cheap, show me the code.先介绍下基础知识,然后做个心跳机制的Demo. 二.连接 长连接:在整个通讯过程,客户端和服务端只用一个S ...
- Ansible 之动态Inventory文件(二)
上篇主要讲解了Ansible 的安装和配置,并且根据不同的业务场景将服务器的信息存放在Ansible的Inventory中,其实存放这样的数据每次更新都需要我们自动的添加和删除,这样对于我们维护起来很 ...
- HanLP vs LTP 分词功能测试
文章摘自github,本次测试选用 HanLP 1.6.0 , LTP 3.4.0 测试思路 使用同一份语料训练两个分词库,同一份测试数据测试两个分词库的性能. 语料库选取1998年01月的人民日报语 ...
- [转]Linux中python3.6+ipython+Jupyter Notebook环境
python3.6安装 下载python安装包,这里下载的最新的3.6.1版本 https://www.python.org/ftp/python/3.6.1/ 将安装包上传到服务器并解压 tar z ...
- DNS子域授权
DNS子域授权 当一个域很大时,而且还有上,下层关系,如果所有的记录变更都由某一台服务器来管理的话,那将会是什么样子?就好比一个公司的总经理直接管理公司1000个人的所有事项,恐怕会被累死.所以会在总 ...