多进程---错误解决Attribute Error

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/GeekLeee/article/details/77838288
多进程---错误解决Attribute Error: Can't get attribute 'long_time_task' on <module '__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)))
展开阅读全文

没有更多推荐了,返回首页