![](/img/trans.png)
[英]Pickle error: AttributeError: Can't get attribute on <module '__main__' (built-in)>
[英]Python Multiprocessing error: AttributeError: Can't get attribute 'task' on <module '__main__' (built-in)>"
我正在使用 spyder 5.1.5,我正在嘗試遵循網站上的第一個示例。 我收到錯誤:
AttributeError: Can't get attribute 'task' on <module '__main__' (built-in)>
task
是我定義的 function。
完整示例代碼:
import multiprocessing
import time
def task(num):
print("a",num)
time.sleep(2)
if __name__ == '__main__':
for i in range(10):
p = multiprocessing.Process(target=task,args=(i,))
p.start()
根據 Python 的文檔:
注意:此 package 中的功能要求
__main__
模塊可由子模塊導入。 這在編程指南中有介紹,但是,值得在這里指出。 這意味着某些示例,例如multiprocessing.pool.Pool示例將無法在交互式解釋器中工作。
Spyder 使用 IPython 控制台,允許您在IPython解釋器中執行命令並與數據交互。 然而,正如 Spyder 維護者在此提到的: “在 Spyder 的 IPython 控制台中,多處理在 Windows 上無法正常工作。”
更新您的 Spyder 軟件,因為您使用的是舊版本 - 如您所提到的5.1.5 - 版本。 但是,如此處所述, “自我們的5.2.0版本(2021 年 11 月發布)以來,運行多處理代碼時生成的打印被捕獲並顯示在所有操作系統的 IPython 控制台中” 。
更改控制台設置以使用外部終端運行您的代碼。 為此,請 go 到: Run
> Configuration per file...
> Execute in an external system terminal
。
如此處所述,您可以將 function 寫入單獨的文件並將其導入腳本。 例如:
任務.py
import time
def task(num):
print("a",num)
time.sleep(2)
主文件
import multiprocessing
from tasks import task
if __name__ == '__main__':
for i in range(10):
p = multiprocessing.Process(target=task,args=(i,))
p.start()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.