Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python多处理池与多处理线程池_Python_Multithreading_Multiprocessing - Fatal编程技术网

Python多处理池与多处理线程池

Python多处理池与多处理线程池,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

我有一个映像路径列表,我想在进程或线程之间划分这些路径,以便每个进程处理列表中的某些部分。处理包括从磁盘加载图像,进行一些计算并返回结果。我正在使用Python2.7
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)。您是否尝试过使用
多进程直接启动进程。进程
?(截至目前,我无法复制您的问题)