python多进程系列(二)多进程模式

一、fork模式【unix】

1、支持文件对象和线程锁等传参
2、拷贝父进程的所有东西,当做子线程去执行,父进程有的在子进程都有
3、拷贝锁:如果锁在外面是锁定状态,拷贝到子进程的时候锁依然是锁定状态,但是是被子进程的主进程获取到的

import multiprocessing
def demo():
    #在子进程中打印test_list
    #这个是创建子线程的时候,从父进程中复制过来的
    print(test_list)
if __name__ == '__main__':
    #设置创建子进程模式为fork模式,windows下不支持
    multiprocessing.set_start_method("fork")
    #主进程的test_list
    test_list = []
    p1 = multiprocessing.Process(target=demo)
    p1.start()
    #打印主线程中的test_list
    print(test_list)

二、spawn模式【unix、win】

1、 不支持文件对象和线程锁等传参
2、在内部创建python解释器,让该解释器再去运行你的代码,只传必要参数,按需传参

import multiprocessing
def demo(test_list):
    #在子进程中打印test_list
    #这个是创建子线程的时候,从父进程中复制过来的
    print(test_list)
if __name__ == '__main__':
    #设置创建子进程模式为spawn模式
    #如果此时要用到主线程的对象,需要通过参数传入,不可以直接使用
    multiprocessing.set_start_method("spawn")
    #主进程的test_list
    test_list = []
    p1 = multiprocessing.Process(target=demo,args=(test_list,))
    p1.start()
    #打印主线程中的test_list
    print(test_list)  

三、forkserver模式【unix】

1、不支持文件对象和线程锁等传参
2、运行之前会先创建一个什么都没有的进程,再创建进程的时候会根据模板创建一个子线程,按需传参

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值