Ahm*_*med 5 python multithreading multiprocessing
我有一个图像路径列表,我想在进程或线程之间划分,以便每个进程处理列表的某些部分.处理包括从磁盘加载图像,进行一些计算并返回结果.我正在使用Python 2.7multiprocessing.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
Run Code Online (Sandbox Code Playgroud)
我面临的问题是,当我在我的Intializer函数中记录初始化时间时,我发现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
Run Code Online (Sandbox Code Playgroud)
我尝试过使用,multiprocessing.pool.ThreadPool
而不是同时启动Workers.
我知道Windows上的多处理是如何工作的,我们必须放置一个main guard
来保护我们的代码不会产生无限的进程.我的问题是我使用FASTCGI在IIS上托管我的脚本,我的脚本不是主要的,它由FastCGI进程运行(有一个wfastcgi.py脚本负责).现在wfastcgi.py中有一个主要的守卫,日志表明我没有创建无限的进程.
现在我想知道多处理池不能同时创建工作线程的原因究竟是什么,我真的很感激任何帮助.
编辑1:这是我的初始化器功能
def Initializer(classifier):
global indexing_classifier
logger.info('Worker started')
indexing_classifier=classifier
Run Code Online (Sandbox Code Playgroud)
小智 0
我在尝试在 cgi/wsgi 下运行多重处理时遇到了很多问题,它在本地工作正常,但在真正的网络服务器上却不行......最终它不兼容。如果您需要进行多处理,请将异步作业发送到 Celery 之类的地方。
归档时间: |
|
查看次数: |
1272 次 |
最近记录: |