簡體   English   中英

嘗試使用泡菜和多處理時出錯

[英]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而不僅僅是將其作為參考傳遞。 而且由於該函數不返回結果,因此ProcesstargetNone

改用這個:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM