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 )
进程:程序的一次执行(程序载入内存,系统分配资源运行).每个进程有自己的内存空间,数据栈等,进程之间可以进行通讯,但是不能共享信息. 线程:所有的线程运行在同一个进程中,共享相同的运行环境.每个独立的 ...
随机推荐
- LeetCode 922. Sort Array By Parity II C++ 解题报告
922. Sort Array By Parity II 题目描述 Given an array A of non-negative integers, half of the integers in ...
- CentOS7.4部署Python3+Django+uWSGI+Nginx
CentOS7.4部署Python3+Django+uWSGI+Nginx http://www.showerlee.com/archives/2590
- javascript 5.2
window.open(url,name,features):创建新的浏览器窗口:url是窗口的地址,name是新窗口名字,features是新窗口的各种属性 真协议特指因特网上两台计算机之间传输各种 ...
- vpdn1
在使用L2TP协议构建的VPDN典型组网中,包含LAC和LNS两部分. 1.LAC LAC表示L2TP访问集中器(L2TP Access Concentrator),是附属在交换网络上的具有PPP端系 ...
- 3.GUI Skin和自定义风格的组件 --《UNITY 3D 游戏开发》笔记
自定义皮肤还是很受女孩子欢迎的吧,这样操作一下界面是不是就可以变得美美哒了~ 先pick一下测试代码: public class GUISkinScript : MonoBehaviour { //自 ...
- Salesforce Invoking Http Callouts and Testing Http Callouts
本文参考官方文档和zero zhang的博客: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/ape ...
- 《我的嵌入式开发》---- IIC 通信
IIC 通用文件,文件是在NRF51xx 芯片基础,keil 平台开发测试通过,后期修改为STM32F2xx系列的配置. 文件百度云盘链接 : https://pan.baidu.com/s/1AFx ...
- 如何长期试用Beyond Compare 4
打开Beyond Compare 4,发现已经过了试用期 我们可以点击立即购买,购买相关的Beyond Compare 4产品,如果你已经有密钥了,可以选择使用密钥 如果还想继续试用,则找到自 ...
- update_engine-整体结构(二)
在update_engine-整体结构(一)中分析UpdateEngineDaemon::OnInit()的整体情况.下面先分析在该方法中涉及的DaemonStateAndroid和BinderUpd ...
- MessageFormat.format 包含单引号引起的不可替换
MessageFormat.format("region = '{0}'", "en");实际结果是region = {0}如果需要被替换的话,需要用双单引号 ...