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执行正射校正的更多相关文章

  1. PIE SDK正射校正

    1. 算法功能简介 正射校正是对影像空间和几何畸变进行校正生成多中心投影平面正射图像的处理过程.它除了能纠正一般系统因素产生的几何畸变外,还可以消除地形引起的几何畸变 PIE支持算法功能的执行,下面对 ...

  2. 基于GPU的高分一号影像正射校正的设计与实现

    一 RPC正射校正的原理 影像正射校正的方法有很多,主要包含两大类:一类是严格的几何纠正模型,另一类是近似几何纠正模型.当遥感影像的成像模型和有关参数已知时,可以根据严格的成像模型来校正图像,这种方法 ...

  3. python 函数的调用 和执行 小知识

    1.符号表 执行一个函数会引入一个用于函数的局部变量的新符号表. 更确切地说, 函数中的所有的赋值都是将值存储在局部符号表: 而变量引用首先查找局部符号表, 然后是上层函数的局部符号表, 然后是全局符 ...

  4. python实现异步调用函数执行

    在实现异步调用之前我们先进行什么是同步调用和异步调用 同步:是指完成事务的逻辑,先执行第一个事务,如果阻塞了,会一直等待,直到这个事务完成,再执行第二个事务,顺序执行 异步:是和同步相对的,异步是指在 ...

  5. java调用Linux执行Python爬虫,并将数据存储到elasticsearch--(环境脚本搭建)

    java调用Linux执行Python爬虫,并将数据存储到elasticsearch中 一.以下博客代码使用的开发工具及环境如下: 1.idea: 2.jdk:1.8 3.elasticsearch: ...

  6. django系列5.4--ORM中执行原生SQL语句, Python脚本中调用django环境

    ORM执行原生sql语句 在模型查询API不够用的情况下,我们还可以使用原始的SQL语句进行查询. Django 提供两种方法使用原始SQL进行查询:一种是使用raw()方法,进行原始SQL查询并返回 ...

  7. python 的多线程执行速度

    python 的多线程有点鸡肋,适用场景有局限,单位时间多个核只能跑一个线程. 有泳池一个,四个泵,但只有一个人,一人只能开启管理着其中一个,所以四个泵没什么用.但是,如果泵的工作时间与冷却恢复时间是 ...

  8. python网络-多线程(22)

    一.什么是线程 线程(英语:thread)是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.同一进程中的多条线程将共享该进程中的全部系统资源,一个进程可以有很多线程,每 ...

  9. Python的多线程(threading)与多进程(multiprocessing )

    进程:程序的一次执行(程序载入内存,系统分配资源运行).每个进程有自己的内存空间,数据栈等,进程之间可以进行通讯,但是不能共享信息. 线程:所有的线程运行在同一个进程中,共享相同的运行环境.每个独立的 ...

随机推荐

  1. Python之进度条及π的计算

    Python之进度条及π的计算 文本进度条 1.  简单的开始 这是利用print()函数来实现简单的非刷新文本进度条.它的基本思想是按照任务执行百分比将整个任务划分为100个单位,每执行N%输出一次 ...

  2. less的安装和使用

    资料: https://www.cnblogs.com/starof/p/5226739.html 

  3. 学习笔记DL008:概率论,随机变量,概率分布,边缘概率,条件概率,期望、方差、协方差

    概率和信息论. 概率论,表示不确定性声明数学框架.提供量化不确定性方法,提供导出新不确定性声明(statement)公理.人工智能领域,概率法则,AI系统推理,设计算法计算概率论导出表达式.概率和统计 ...

  4. annotation的理解

    Annotations提供一些本来不属于程序的数据. 比如:一段代码的作者或者告诉编译器禁止一些特殊的错误.An annotation 对代码的执行没有什么影响.Annotations使用@annot ...

  5. c#实现识别图片上的验证码数字

    这篇文章主要介绍了c#实现识别图片上的验证码数字的方法,本文给大家汇总了2种方法,有需要的小伙伴可以参考下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 ...

  6. Actifio中的Group和Consistency Group

    多个应用程序具有相同的保护需求时可以使用应用程序组: Groups用于简化管理,将策略应用于组内的应用程序. 组中的每个应用程序的备份映像单独执行装载,克隆和还原操作. Consistency Gro ...

  7. 使用dotenv 管理nodejs 应用的环境变量&&docker-compose 运行

      说明dotenv 是一个很方便的符合12 factor 的环境变量管理工具,使用很方便,实际上里面的代码也不是很多 测试使用docker 进行环境部署,为了方便分发使用pkg 进行打包,使用alp ...

  8. 一键安装Davinci

    官网:https://edp963.github.io/davinci/index.html 下载地址:https://github.com/edp963/davinci   环境:Centos7   ...

  9. 使用QTP12.2录制windows applications,没有脚本产生

    使用QTP12.2录制windows applications,没有脚本产生解决方案:关闭电脑的杀毒软件和安全卫士,再进行录制,所有步骤录制成功.录制QTP自带程序flight,选择windows a ...

  10. MongoDB Sharding分片 shell 脚本

    #!/bin/sh CONFIG_NAME=$ CONFIG_PORT=$ SERIAL_NUM=$ STORAGE_HOME=$ if [ ! -n "$CONFIG_NAME" ...