Python multiprocessing.Pool不会立即启动
发布时间:2020-12-20 13:11:54 所属栏目:Python 来源:网络整理
导读:我想将文本输入到 python并并行处理它.为此,我使用multiprocessing.Pool.问题是,有时候,并非总是如此,我必须在处理任何内容之前多次输入文本. 这是我的代码的最小版本,以重现问题: import multiprocessing as mpimport timedef do_something(text): print('
我想将文本输入到
python并并行处理它.为此,我使用multiprocessing.Pool.问题是,有时候,并非总是如此,我必须在处理任何内容之前多次输入文本.
这是我的代码的最小版本,以重现问题: import multiprocessing as mp import time def do_something(text): print('Out: ' + text,flush=True) # do some awesome stuff here if __name__ == '__main__': p = None while True: message = input('In: ') if not p: p = mp.Pool() p.apply_async(do_something,(message,)) 发生的事情是,在得到结果之前我必须多次输入文本,无论我在第一次输入内容后等待多久. (如上所述,每次都不会发生这种情况.) python3 test.py In: a In: a In: a In: Out: a Out: a Out: a 如果我在while循环之前创建池,或者如果我在创建池之后添加time.sleep(1),它似乎每次都有效.注意:在获得输入之前,我不想创建池. 有人对此行为有解释吗? 我正在使用Python 3.4.2运行Windows 10 编辑: 一个更简单的示例,包含Pool和ProcessPoolExecutor.我认为问题是在appyling / submitting之后调用input(),这在第一次appyling / submitting时似乎只是一个问题. import concurrent.futures import multiprocessing as mp import time def 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') # Pool if __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 mp import time def do_something(text): print('Out: ' + text,flush=True) # do some awesome stuff here if __name__ == '__main__': p = None while True: message = input('In: ') if not p: p = mp.Pool(1) p.apply_async(do_something,)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |