Python 多进程报错

AttributeError: module ‘os’ has no attribute ‘fork’ 原因与解决方法

今天在看Python多进程的时候,在Windows上运行Python代码的时候,出现了如下错误:

AttributeError: module 'os' has no attribute 'fork'

中文翻译

AttributeError:模块“ os”没有属性“ fork”

 

 

而我直接在Linux上运行,却又不会出现这个错误,如下图:

 

 

经过一番资料查找,到了具体的原因,如下:

由于Windows没有fork调用,上面的代码在Windows上无法运行。因此,建议 os.fork() 不要在windows系统上用。

如果想要有fork调用,推荐大家用Unix/Linux或mac系统的电脑。

 

解决方法

由于Windows没有fork调用,难道在Windows上无法用Python编写多进程的程序?无法调用fork吗?

答案肯定是:NO!

 

windows下可以使用multiproessing代替os.fork功能。

 

由于Python是跨平台的,自然也应该提供一个跨平台的多进程支持。multiprocessing模块就是跨平台版本的多进程模块。

 

multiprocessing模块提供了一个Process类来代表一个进程对象,下面的例子演示了启动一个子进程并等待其结束:

 

 

def run_proc(name):
    print('运行子进程%s(%s)......'%(name,os.getpid()))

if __name__ == '__main__':
    print('父进程%s'%os.getpid())
    p = Process(target=run_proc,args=('test',))
    print('子进程将开始')
    p.start()
    p.join()
    print('子进程结束')

 

结果:

 

父进程19124
子进程将开始
运行子进程test(19132)......
子进程结束
[Finished in 0.7s]