Python多进程

1. 多进程开发

  1. 进程是计算机中资源分配的最小单元;一个进程中可有多个线程,同一个进程中的线程共享资源;
  2. 进程与线程之间是相互隔离;
  3. Python中通过多进程可以利用CPU的多核优势,计算密集型操作使用与多进程;

1.1进程介绍

注意:进程的启动一定要写在if __name__ == "__mian__":
import multiprocessing

def task(args):
    pass

if __name__ == "__main__":
    p1 = multiprocessing.Process(target = task, args=('xxx',))
    p1.start()
关于multiprocessing的三种创建模式(fork, spawn, forkserver)
  • fork:适用于linux系统、mac系统(默认为spawn),可在任意位置启动进程,速度快,【子进程 拷贝 主进程 几乎所有资源】,【支持 文件对象/线程锁等传参】;
  • spawn:适用linux系统、win系统、mac系统,只能在if __name__ == "__mian__":中启动,速度慢,【run参数传必备资源】,【不支持 文件对象/线程锁等传参】;
import multiprocessing

def task():
    pass

if __name__ == "__main__":
    # 在此处设置(win没必要设置,只能支持spawn)
    multiprocessing.set_start_method("spawn")
    p1 = multiprocessing.Process(target = task)
    p1.start()
  • forkserver:适用部分linux系统,只能在if __name__ == "__mian__":中启动(兼容性最差,几乎不使用);
因为大部分人使用的是win系统开发,所以这里只介绍spawn(主要还是因为qiong)
  1. 若你的开发环境为mac系统,使用fork,则无需手动向子进程传送参数,子进程已经获取到主进程的所有参数,并会给你自动分配;
  2. 若你和我一样qiong,则在创建子进程时,应该告知子进程你需要传入的参数;
注意:进程需等待cpu去执行(等待时间随机),cpu运行的其实是Process中的run方法;
import multiprocessing
import time

def task(data):
    print(data)
    data.append(123)

if __name__ == "__main__":
    multiprocessing.set_start_method("spawn")
    data = []
    p1 = multiprocessing.Process(target = task, args = (data,))
    p1.start()
    
    time.sleep(1)
    print(data)

1.2常见功能

进程的常见方法:
  • p.start(),当前进程准备就绪,等待cpu调度(工作单元其实是进程的线程)
  • p.join(),等待当前进程的任务执行完毕后再向下继续执行
import time
import multiprocessin
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值