python多线程执行同样代码_python利用多进程多线程加速代码的执行效率

这里不谈理论知识, 什么GIL什么的,还有各种理论知识,可以自行搜索了解学习,这里我只附上一些我常用的代码方法。

1. python多线程

多线程适用于IO密集型的程序,能够很大程度上提升代码的执行效率,但是面对计算密集型的程序就有点无能为力了(这里我在实际中进行图像处理时,试过,用多进程更好)

这里附上一个多线程的一个套路代码

import multithreading

def image_processing(imageName,args1, args2):

'''这个函数放置具体的图像处理代码, args1,args2为其他必要的参数

'''

pass

# 设置锁

threadLock = threading.Lock()

def get_imgName(imgNames):

'''利用锁,获得每一张图片,这里imgNames为一个迭代器

'''

print ('thread %s is running...' % threading.current_thread().name)

while True:

try:

with threadLock:

img_file_name = next(imgNames) # 获取原图的文件名

except StopIteration:

return None

image_processing(img_file_name, args1, args2,)

if __name__ == '__main__':

# #线程数

thread_num = opt.thread_num

ts = []

for i in range(0, thread_num):

t = threading.Thread(target=get_imgName, name='_parallel_save_imageThread %s' % i,

args=(imgNames,))

# t.setDaemon(True) #把子进程设置为守护线程,必须在start()之前设置

t.start()

ts.append(t)

for t in ts:

t.join()

2. 多进程简单代码

from multiprocessing import Pool

def image_processing(imageName,args1, args2):

'''这个函数放置具体的图像处理代码, args1,args2为其他必要的参数

'''

pass

if __name__ == "__main__":

# #进程数

process_num = opt.process_num

processing_pool = Pool(processes=process_num)

#=========================================================#

# 多进程主要代码 #

#=========================================================#

for img_file_name in files:

processing_pool.apply_async(

func = image_processing,

args = (img_file_name,args1, args2, )

)

processing_pool.close()

processing_pool.join()

3. 多进程向同一个list或者dict写元素

import multiprocessing

def image_processing(imageName,syn_info, args1, args2):

'''这个函数放置具体的图像处理代码, args1,args2为其他必要的参数

'''

pass

if __name__ == '__main__':

# 进程数

processing_num = opt.processing_num

# 进程池

processing_pool = multiprocessing.Pool(processes=processing_num)

# 最终保存的字典,需要采用多进程通信的字典格式

syn_info = multiprocessing.Manager().dict()

# syn_info = multiprocessing.Manager().list()

for img_file_name in range(files):

processing_pool.apply_async(

func = image_processing,

args = (img_file_name, syn_info,args1, args2, )

)

processing_pool.close()

processing_pool.join()

这里记录一下基本的框架代码,更多的multithreading与multiprocessign这俩包的细节知识,其实我也不大懂,都是用着学着,查着

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值