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

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

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

中文翻译

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

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

 

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

Linux python os.fork()

 

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

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

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

 

解决方法

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

答案肯定是:NO!

 

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

 

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

 

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

from multiprocessing import Process
import os

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('子进程结束')

运行结果:

父进程12968

子进程将开始

运行子进程test(2476)......

子进程结束

 

创建子进程时,只需要传入一个执行函数和函数的参数,创建一个Process实例,用start()方法启动,这样创建进程比fork()还要简单。

join()方法可以等待子进程结束后再继续往下运行,通常用于进程间的同步。

    A+
发布日期:2019年10月05日 14:54:36  所属分类:Python
最后更新时间:2021-07-07 11:48:52
付杰
  • ¥ 1980.0元
  • 市场价:2980.0元
  • ¥ 199.0元
  • 市场价:899.0元
  • ¥ 89.0元
  • 市场价:129.0元
  • ¥ 79.0元
  • 市场价:99.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: