多进程---AttributeError 错误的解决方法

运行多进程程序时出现错误AttributeError: Can't get attribute 'long_time_task' on <module '__main__' (built-in)>。由于某些原因Pool不能使用未在导入的模块中定义的对象。解决的方法是你必须将函数写入不同的文件模块并导入该模块。

解决办法:

一个文件产生错误,把函数定义放在另一个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)))

这个问题似乎是多处理器的一个设计缺陷,具体请参阅:https://bugs.python.org/issue25053

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容