python中os.fork()方法

在Python中,如果我们希望并发的执行一些任务,最简单的办法是使用os下面的fork()方法,例如

import os

print("OSFork")

contentStr = 'hello'

pid = os.fork()
if pid == 0:
    contentStr = contentStr + ' child'
    print(contentStr)
else:
    contentStr = contentStr + ' parent'
    print(contentStr)

print("over")

运行一下,打印结果如下

dengyuguodeMacBook-Air:python dengyuguo$ /usr/bin/python3 /Users/dengyuguo/Desktop/python/OSFork.py
OSFork
hello parent
over
hello child
over

第一次看到这种写法跟运行结果可能会感觉比较奇怪。实际上这里Python是借鉴了linux系统对多线程的实现,准确点说是多进程。

       linux系统中,fork()方法会产生一个新的进程,并且和当前进程一起返回,差别是当前进程中会返回创建的子进程的pid,而子进程中返回的pid是0。后续的逻辑在两个进程中都会执行,我们能够通过返回的pid是否为0来判断代码是跑在子进程,还是当前进程。

        数据问题,fork()函数执行后,子进程会共享父进程的内存空间,但是这个内存空间被标记为“写时复制”。所谓写时复制,指的是两个任务可以同时自由的读取内存,但任意一个任务试图对内存进行修改时,内存就会复制一份提供给修改方单独使用,以免影响到其他的任务使用。

        理解了背后的设计逻辑,再看上面的代码,就感觉很清晰了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值