[英]Error when trying to use pickle and multiprocessing
我正在嘗試使用多處理在 Python 3.7 中運行我的代碼,但遇到了問題。 當我嘗試運行我的代碼時出現錯誤:
Can't pickle local object 'mm_prepare_run.<locals>...
我知道這是pickle的問題,但我沒有找到正確的答案來解決這個問題。
我的簡單代碼如下。 你能告訴我如何解決這個問題嗎?
import multiprocessing
import copy
from pathlib import Path
proc_mrg = multiprocessing.Manager()
num_cpu = 8 # number of CPU
def prepare_run(config):
din['config'] = config
din_temp = copy.deepcopy(din)
dout_list.append(proc_mrg.dict({}))
#process = multiprocessing.Process(target=Run_IDEAS_instance_get_trajectory,args=(din_temp, dout_list[-1]))
process = multiprocessing.Process(target=Run_IDEAS_instance_get_trajectory(din_temp, dout_list[-1]))
proc_list.append(process)
for job in proc_list:
job.start()
創建Process
時,在prepare_run
中調用Run_IDEAS_instance_get_trajectory
而不僅僅是將其作為參考傳遞。 而且由於該函數不返回結果,因此Process
的target
是None
。
改用這個:
process = multiprocessing.Process(
target=Run_IDEAS_instance_get_trajectory,
args=(din_temp, dout_list[-1])
)
Python 中的函數是可調用類型的第一類對象。 請參閱 Python 語言參考中的“數據模型”一章。
編輯:
從您的評論中,我可以看到您正在 ms-windows 上運行此代碼。 在此平台上,您需要在if __name__ == "__main__"
塊內運行進程創建! 由於multiprocessing
在這個平台上的工作方式,python 必須能夠導入您的腳本而不會產生副作用,例如啟動一個新進程。 請參閱multiprocessing
文檔中的“編程指南”部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.