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 )
进程:程序的一次执行(程序载入内存,系统分配资源运行).每个进程有自己的内存空间,数据栈等,进程之间可以进行通讯,但是不能共享信息. 线程:所有的线程运行在同一个进程中,共享相同的运行环境.每个独立的 ...
随机推荐
- Node - centOS配置环境
1.安装依赖包:yum install gcc-c++ openssl-devel (gcc版本查询:gcc -v ,为 4.4.7-11:python版本查询:python –version 为2. ...
- java web(四):request、response一些用法和文件的上传和下载
上一篇讲了ServletContent.ServletCOnfig.HTTPSession.request.response几个对象的生命周期.作用范围和一些用法.今天通过一个小项目运用这些知识.简单 ...
- java中移位运算
转自: https://blog.csdn.net/wk1134314305/article/details/74891419
- EasyMall注册功能
EasyMall注册功能 1. 环境搭建 创建一个EasyMall的web应用 配置www.easymall.com网站,并配置为缺省的虚拟主机,将EasyMall配 置为缺省的web应用,在配置in ...
- day05 模块学习
目录 1.模块简介 2.collections模块常见方法 3.random模块 4.time模块 5.pickle模块 6.json模块 7.os模块 8.sys模块 9.正则表达式 10.re模块 ...
- 使用PROC TRANSPOSE过程步对数据集进行转置时如何保持日期变量的时间顺序
有一个数据集如下所示: 如果直接进行转置. SAS程序: proc transpose data=test out=outx1 (drop=_name_); by id; var amount; id ...
- netty拆包粘包
客户端 tcp udp socket网络编程接口 http/webservice mqtt/xmpp 自定义RPC (dubbo) 应用层 服务端 ServerSocket ss = new serv ...
- xtrabackup备份MySQL报错:InnoDB: Error number 24 means 'Too many open files'
xtrabackup备份MySQL报错:InnoDB: Error number 24 means 'Too many open files' 1.使用xtrabackup备份MySQL时出现如下报错 ...
- 用c语言创建双向环形链表
作为一个C开发人员,无论在求职笔试题中,还是在工程项目中,都会遇到用c语言创建双向环形链表.这个也是理解和使用c指针的一项基本功. #include<...>//头文件省略 typedef ...
- 运用scrollPic插件的实例
html页面部分 <!doctype html> <html lang="en"> <head> <meta charset=" ...