这是我的代码的最小版本,以重现问题:
import multiprocessing as mpimport timedef do_something(text): print('Out: ' + text,flush=True) # do some awesome stuff hereif __name__ == '__main__': p = None while True: message = input('In: ') if not p: p = mp.Pool() p.apply_async(do_something,(message,))
发生的事情是,在得到结果之前我必须多次输入文本,无论我在第一次输入内容后等待多久. (如上所述,每次都不会发生这种情况.)
python3 test.pyIn: aIn: aIn: aIn: Out: aOut: aOut: a
如果我在while循环之前创建池,或者如果我在创建池之后添加time.sleep(1),它似乎每次都有效.注意:在获得输入之前,我不想创建池.
有人对此行为有解释吗?
我正在使用Python 3.4.2运行windows 10
编辑:与Python 3.5.1相同的行为
编辑:
一个更简单的示例,包含Pool和ProcesspoolExecutor.我认为问题是在appyling / submitting之后调用input(),这在第一次appyling / submitting时似乎只是一个问题.
import concurrent.futuresimport multiprocessing as mpimport timedef do_something(text): print('Out: ' + text,flush=True) # do some awesome stuff here# ProcesspoolExecutor# if __name__ == '__main__':# with concurrent.futures.ProcesspoolExecutor() as executor:# executor.submit(do_something,'a')# input('In:')# print('done')# Poolif __name__ == '__main__': p = mp.Pool() p.apply_async(do_something,('a',)) input('In:') p.close() p.join() print('done')解决方法 我在Mac上试用它时你的代码有效.
在Python 3中,可能有助于明确声明池中将有多少处理器(即同时进程的数量).
尝试使用p = mp.Pool(1)
import multiprocessing as mpimport timedef do_something(text): print('Out: ' + text,flush=True) # do some awesome stuff hereif __name__ == '__main__': p = None while True: message = input('In: ') if not p: p = mp.Pool(1) p.apply_async(do_something,))总结
以上是内存溢出为你收集整理的Python multiprocessing.Pool不会立即启动全部内容,希望文章能够帮你解决Python multiprocessing.Pool不会立即启动所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)