python进程获取
Ⅰ python线程池(ThreadPoolExecutor)与进程池(ProcessPoolExecutor)的简单用法
Python中ThreadPoolExecutor与ProcessPoolExecutor的简单用法如下:
ThreadPoolExecutor: 导入模块:首先需要从concurrent.futures模块中导入ThreadPoolExecutor。 创建线程池:使用ThreadPoolExecutor创建一个线程池,其中n是线程池中线程的数量。 提交任务:通过submit方法提交任务到线程池,该方法返回一个Future对象,用于跟踪任务的状态和结果。 等待任务完成:可以使用wait方法等待任务完成,其中fs是Future对象的集合,timeout是等待的超时时间,return_when指定返回条件。 获取结果:使用map方法按顺序返回任务执行结果,或者通过as_completed方法返回已完成的任务,返回顺序与任务执行结束的顺序一致。
ProcessPoolExecutor: 导入模块:从concurrent.futures模块中导入ProcessPoolExecutor。 创建进程池:使用ProcessPoolExecutor创建一个进程池,其中n是进程池中进程的数量,通常可以设置为CPU的核心数。 提交任务:与ThreadPoolExecutor类似,通过submit方法提交任务到进程池,并返回一个Future对象。 等待任务完成:使用wait方法等待任务完成,参数与ThreadPoolExecutor中的wait方法相同。 获取结果:ProcessPoolExecutor也提供了map和as_completed方法用于获取任务的结果。特别地,map方法还接受一个chunksize参数,用于分割大型迭代对象,以提高性能。
重点注意事项: 选择使用场景:对于IO密集型任务,ThreadPoolExecutor通常更高效;而对于计算密集型任务,ProcessPoolExecutor由于可以充分利用多核CPU,因此具有更高的执行效率。 GIL:Python的GIL限制了同一时间只有一个线程可以执行Python字节码,这影响了多线程在CPU密集型任务中的性能。 资源管理:使用线程池和进程池时,需要注意合理设置工作线程/进程的数量,以避免资源过度占用或浪费。
Ⅱ Python3多进程运行返回值怎么获得
frommultiprocessingimportPool
importtime
defwork(n):
print('开工啦...')
time.sleep(3)
returnn**2
if__name__=='__main__':
q=Pool()
#异步apply_async用法:如果使用异步提交的任务,主进程需要使用jion,等待进程池内任务都处理完,然后可以用get收集结果,否则,主进程结束,进程池可能还没来得及执行,也就跟着一起结束了
res=q.apply_async(work,args=(2,))
q.close()
q.join()#join在close之后调用
print(res.get())
#同步apply用法:主进程一直等apply提交的任务结束后才继续执行后续代码
#res=q.apply(work,args=(2,))
#print(res)