運(yùn)行多進(jìn)程程序時(shí)出現(xiàn)錯(cuò)誤AttributeError: Can't get attribute 'long_time_task' on <module '__main__' (built-in)>
容达。由于某些原因Pool不能使用未在導(dǎo)入的模塊中定義的對(duì)象穿稳。解決的方法是你必須將函數(shù)寫入不同的文件模塊并導(dǎo)入該模塊院促。
解決辦法:
一個(gè)文件產(chǎn)生錯(cuò)誤蚊丐,把函數(shù)定義放在另一個(gè)py文件中再引入睁本。
one.py
from multiprocessing import Pool
from long_time_task import long_time_task
import os
if __name__=='__main__':
print('Parent process %s.' % os.getpid())
p = Pool(4)
for i in range(5):
p.apply_async(long_time_task, args=(i,))
print('Waiting for all subprocesses done...')
p.close()
p.join()
print('All subprocesses done.')
long_time_task.py
import os, time, random
def long_time_task(name):
print('Run task %s (%s)...' % (name, os.getpid()))
start = time.time()
time.sleep(random.random() * 3)
end = time.time()
print('Task %s runs %0.2f seconds.' % (name, (end - start)))
這個(gè)問題似乎是多處理器的一個(gè)設(shè)計(jì)缺陷檀葛,具體請(qǐng)參閱:https://bugs.python.org/issue25053