多进程---错误解决Attribute Error: Can't get attribute 'long_time_task' on __main__' (built-in)>
StackOverflow解决办法
这个问题似乎是多处理器的一个设计特征。请参阅https://bugs.python.org/issue25053。由于某些原因Pool不能始终使用未在导入的模块中定义的对象。所以你必须将函数写入不同的文件并导入模块。
解决办法
一个文件产生错误,把函数定义放在另一个py文件中再引入
one.py
from multiprocessing import Pool
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)))