Python多处理池与多处理线程池
我有一个映像路径列表,我想在进程或线程之间划分这些路径,以便每个进程处理列表中的某些部分。处理包括从磁盘加载图像,进行一些计算并返回结果。我正在使用Python2.7Python多处理池与多处理线程池,python,multithreading,multiprocessing,Python,Multithreading,Multiprocessing,我有一个映像路径列表,我想在进程或线程之间划分这些路径,以便每个进程处理列表中的某些部分。处理包括从磁盘加载图像,进行一些计算并返回结果。我正在使用Python2.7multiprocessing.Pool 下面是我如何创建工作进程的 def ProcessParallel(classifier,path): files=glob.glob(path+"\*.png") files_sorted=sorted(files,key=lambda file_name:int(file
multiprocessing.Pool
下面是我如何创建工作进程的
def ProcessParallel(classifier,path):
files=glob.glob(path+"\*.png")
files_sorted=sorted(files,key=lambda file_name:int(file_name.split('--')[1]))
p = multiprocessing.Pool(processes=4,initializer=Initializer,initargs=(classifier,))
data=p.map(LoadAndClassify, files_sorted)
return data
我所面临的问题是,当我在initializer函数中记录初始化时间时,我知道worker不是并行初始化的,而是每个worker都以5秒的间隔初始化,下面是供参考的日志
2016-08-08 12:38:32,043 - custom_logging - INFO - Worker started
2016-08-08 12:38:37,647 - custom_logging - INFO - Worker started
2016-08-08 12:38:43,187 - custom_logging - INFO - Worker started
2016-08-08 12:38:48,634 - custom_logging - INFO - Worker started
我尝试使用multiprocessing.pool.ThreadPool
,它可以同时启动worker。我知道Windows上的多进程是如何工作的,我们必须放置一个
主保护
,以保护我们的代码不产生无限进程。在我的例子中,问题是我使用FASTCGI在IIS上托管了我的脚本,而我的脚本不是main,它由FASTCGI进程运行(有一个wfastcgi.py脚本负责)。现在wfastcgi.py中有一个主保护,日志表明我没有创建无限多个进程。
现在我想知道到底是什么原因造成的 多处理池不同时创建工作线程,我将 非常感谢您的帮助 编辑1:这是我的初始化函数
def Initializer(classifier):
global indexing_classifier
logger.info('Worker started')
indexing_classifier=classifier
我尝试在cgi/wsgi下运行多处理时遇到了很多问题,它在本地运行得很好,但在真正的Web服务器上却不行。。。最终它就是不兼容。如果您需要进行多处理,那么将异步作业发送到芹菜之类的东西。初始化器做什么?只是记录工作人员启动的时间,并向每个工作人员传递一个名为“分类器”的变量worker@MuhammadTahir请查看编辑的问题这可能是由于新流程启动缓慢,虽然我的笔记本电脑没有任何问题。您能否确认在执行此代码的地方,没有资源短缺(尤其是CPU)。您是否尝试过使用
多进程直接启动进程。进程
?(截至目前,我无法复制您的问题)