我試圖端口一些代碼在Python 3.6到Python 3.7在Windows 10,我打電話時看到的多處理代碼掛.get()在上AsyncResult對象。有問題的代碼要復(fù)雜得多,但我已將其歸結(jié)為類似于以下程序的內(nèi)容。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 中運行。出于某種原因,第一次調(diào)用get()掛起在 3.7 中,但在其他版本上一切正常。
1 回答

米琪卡哇伊
TA貢獻(xiàn)1998條經(jīng)驗 獲得超6個贊
我覺得這是描述在Python 3.7.2回歸這里。它似乎只在 virtualenv 中運行時影響用戶。
目前,您可以通過在 bug thread 上執(zhí)行此評論中描述的操作來解決它。
import _winapi
import multiprocessing.spawn
multiprocessing.spawn.set_executable(_winapi.GetModuleFileName(0))
這將強制子進(jìn)程使用真正的python.exe 而不是 virtualenv 中的那個。因此,如果您使用 PyInstaller 將東西捆綁到一個 exe 中,這可能不合適,但是從 CLI 運行本地 Python 安裝時它可以正常工作。
添加回答
舉報
0/150
提交
取消