多重处理错误“ AttributeError:在<module'__main__上无法获取属性'testfuncxx'”

时间:2019-07-19 04:13:59

标签: python multiprocessing

#!/usr/bin/env python3.5
import multiprocessing, time

def testfuncxx(num):
    time.sleep(num)
    print(num


pool = multiprocessing.Pool(processes=3)

)

for i in range(10):
    #testfuncxx(i)
    #print(i, '=======')
    pool.apply_async(testfuncxx, args=(i,))

pool.close()
pool.join()

1 个答案:

答案 0 :(得分:0)

由于只能在Windows上进行测试,因此当我将代码包含在if __name__ == '__main__'入口点保护中时,该代码才能工作。更多详细信息here。通常,建议在multiprocessing guidelines中加入这种保护。

注意:该代码已作为脚本 test.py 运行。要在IPython或Jupyter笔记本中运行代码,您可以像import test那样导入它。

test.py

import multiprocessing, time

def testfuncxx(num):
    time.sleep(num)    
    print(num)

def apply_async_callback():  
    pool = multiprocessing.Pool(processes=3) 
    for i in range(10):  
        pool.apply_async(testfuncxx, args=(i,))
    pool.close()
    pool.join()  


if __name__=='__main__':    
    apply_async_callback()

#Output:
0
1
2
3
4
5
6
7
8
9