香港云主机最佳企业级服务商!

ADSL拨号VPS包含了中国大陆(联通,移动,电信,)

中国香港,国外拨号VPS。

当前位置:云主机 > python >

电信ADSL拨号VPS
联通ADSL拨号VPS
移动ADSL拨号VPS

Python实现多进程的四种方式


时间:2022-04-02 10:19 作者:admin


方式一: os.fork()

# -*- coding:utf-8 -*-"""pid=os.fork()  1.只用在Unix系统中有效,Windows系统中无效  2.fork函数调用一次,返回两次:在父进程中返回值为子进程id,在子进程中返回值为0"""import ospid=os.fork()if pid==0:  print("执行子进程,子进程pid={pid},父进程ppid={ppid}".format(pid=os.getpid(),ppid=os.getppid()))else:  print("执行父进程,子进程pid={pid},父进程ppid={ppid}".format(pid=pid,ppid=os.getpid()))

方式二: 使用multiprocessing模块: 创建Process的实例,传入任务执行函数作为参数

# -*- coding:utf-8 -*-"""Process常用属性与方法:  name:进程名  pid:进程id  run(),自定义子类时覆写  start(),开启进程  join(timeout=None),阻塞进程  terminate(),终止进程  is_alive(),判断进程是否存活"""import os,timefrom multiprocessing import Processdef worker():  print("子进程执行中>>> pid={0},ppid={1}".format(os.getpid(),os.getppid()))  time.sleep(2)  print("子进程终止>>> pid={0}".format(os.getpid()))def main():  print("主进程执行中>>> pid={0}".format(os.getpid()))  ps=[]  # 创建子进程实例  for i in range(2):    p=Process(target=worker,name="worker"+str(i),args=())    ps.append(p)  # 开启进程  for i in range(2):    ps[i].start()  # 阻塞进程  for i in range(2):    ps[i].join()  print("主进程终止")if __name__ == '__main__':  main()

方式三: 使用multiprocessing模块: 派生Process的子类,重写run方法

# -*- coding:utf-8 -*-import os,timefrom multiprocessing import Processclass MyProcess(Process):  def __init__(self):    Process.__init__(self)  def run(self):    print("子进程开始>>> pid={0},ppid={1}".format(os.getpid(),os.getppid()))    time.sleep(2)    print("子进程终止>>> pid={}".format(os.getpid()))def main():  print("主进程开始>>> pid={}".format(os.getpid()))  myp=MyProcess()  myp.start()  # myp.join()  print("主进程终止")if __name__ == '__main__':  main()

方式四: 使用进程池Pool

# -*- coding:utf-8 -*-import os,timefrom multiprocessing import Pooldef worker(arg):  print("子进程开始执行>>> pid={},ppid={},编号{}".format(os.getpid(),os.getppid(),arg))  time.sleep(0.5)  print("子进程终止>>> pid={},ppid={},编号{}".format(os.getpid(),os.getppid(),arg))def main():  print("主进程开始执行>>> pid={}".format(os.getpid()))  ps=Pool(5)  for i in range(10):    # ps.apply(worker,args=(i,))     # 同步执行    ps.apply_async(worker,args=(i,)) # 异步执行  # 关闭进程池,停止接受其它进程  ps.close()  # 阻塞进程  ps.join()  print("主进程终止")if __name__ == '__main__':  main()

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

(责任编辑:admin)






帮助中心
会员注册
找回密码
新闻中心
快捷通道
域名登录面板
虚机登录面板
云主机登录面板
关于我们
关于我们
联系我们
联系方式

售前咨询:17830004266(重庆移动)

企业QQ:383546523

《中华人民共和国工业和信息化部》 编号:ICP备00012341号

Copyright © 2002 -2018 香港云主机 版权所有
声明:香港云主机品牌标志、品牌吉祥物均已注册商标,版权所有,窃用必究

云官方微信

在线客服

  • 企业QQ: 点击这里给我发消息
  • 技术支持:383546523

  • 公司总台电话:17830004266(重庆移动)
  • 售前咨询热线:17830004266(重庆移动)