为了账号安全,请及时绑定邮箱和手机立即绑定

Multiprocessing AsyncResult.get() 在 Python 3.7.2

Multiprocessing AsyncResult.get() 在 Python 3.7.2

人到中年有点甜 2021-10-26 18:35:58
我试图端口一些代码在Python 3.6到Python 3.7在Windows 10,我打电话时看到的多处理代码挂.get()在上AsyncResult对象。有问题的代码要复杂得多,但我已将其归结为类似于以下程序的内容。import multiprocessingdef main(num_jobs):    num_processes = max(multiprocessing.cpu_count() - 1, 1)    pool = multiprocessing.Pool(num_processes)    func_args = []    results = []    try:        for num in range(num_jobs):            args = (1, 2, 3)            func_args.append(args)            results.append(pool.apply_async(print, args))        for result, args in zip(results, func_args):            print('waiting on', args)            result.get()    finally:        pool.terminate()        pool.join()if __name__ == '__main__':    main(5)此代码也在 Python 2.7 中运行。出于某种原因,第一次调用get()挂起在 3.7 中,但在其他版本上一切正常。
查看完整描述

1 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

我觉得这是描述在Python 3.7.2回归这里。它似乎只在 virtualenv 中运行时影响用户。


目前,您可以通过在 bug thread 上执行此评论中描述的操作来解决它。


import _winapi

import multiprocessing.spawn

multiprocessing.spawn.set_executable(_winapi.GetModuleFileName(0))

这将强制子进程使用真正的python.exe 而不是 virtualenv 中的那个。因此,如果您使用 PyInstaller 将东西捆绑到一个 exe 中,这可能不合适,但是从 CLI 运行本地 Python 安装时它可以正常工作。


查看完整回答
反对 回复 2021-10-26
  • 1 回答
  • 0 关注
  • 203 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号