Python实现多进程的四种方式


Posted in Python onFebruary 22, 2019

方式一: os.fork()

# -*- coding:utf-8 -*-
"""
pid=os.fork()
  1.只用在Unix系统中有效,Windows系统中无效
  2.fork函数调用一次,返回两次:在父进程中返回值为子进程id,在子进程中返回值为0
"""
import os
pid=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,time
from multiprocessing import Process
def 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,time
from multiprocessing import Process
class 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,time
from multiprocessing import Pool
def 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()

总结

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

Python 相关文章推荐
python控制台英汉汉英电子词典
Apr 23 Python
Python制作CSDN免积分下载器
Mar 10 Python
初步理解Python进程的信号通讯
Apr 09 Python
基于ID3决策树算法的实现(Python版)
May 31 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
Oct 26 Python
python实现简单加密解密机制
Mar 19 Python
pycharm设置鼠标悬停查看方法设置
Jul 29 Python
Python连接字符串过程详解
Jan 06 Python
Python2 与Python3的版本区别实例分析
Mar 30 Python
python tkinter实现定时关机
Apr 21 Python
关于Python使用turtle库画任意图的问题
Apr 01 Python
利用Python实现模拟登录知乎
May 25 Python
python在回调函数中获取返回值的方法
Feb 22 #Python
python实现批量注册网站用户的示例
Feb 22 #Python
Python多进程fork()函数详解
Feb 22 #Python
Django restframework 源码分析之认证详解
Feb 22 #Python
运用Python的webbrowser实现定时打开特定网页
Feb 21 #Python
Python3爬虫之自动查询天气并实现语音播报
Feb 21 #Python
python 自动批量打开网页的示例
Feb 21 #Python
You might like
PHP四舍五入精确小数位及取整
2014/01/14 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
2015/03/07 PHP
PHP count_chars()函数讲解
2019/02/14 PHP
php伪静态验证码不显示的解决方案
2019/09/26 PHP
js 编码转换 gb2312 和 utf8 互转的2种方法
2013/08/07 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
2014/03/13 Javascript
js实现键盘上下左右键选择文字并显示在文本框的方法
2015/05/07 Javascript
JavaScript中的bold()方法使用详解
2015/06/08 Javascript
全屏js头像上传插件源码高清版
2016/03/29 Javascript
Node.js中Request模块处理HTTP协议请求的基本使用教程
2016/03/31 Javascript
JavaScript简单实现弹出拖拽窗口(二)
2016/06/17 Javascript
vue-cli的webpack模板项目配置文件分析
2017/04/01 Javascript
react-redux中connect()方法详细解析
2017/05/27 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
2017/06/19 Javascript
vue拖拽排序插件vuedraggable使用方法详解
2020/08/21 Javascript
vue中keep-alive内置组件缓存的实例代码
2020/04/16 Javascript
在vue中axios设置timeout超时的操作
2020/09/04 Javascript
[03:58]2014DOTA2国际邀请赛 龙宝赛后解密DK获胜之道
2014/07/14 DOTA
Python函数嵌套实例
2014/09/23 Python
Python读取一个目录下所有目录和文件的方法
2016/07/15 Python
python调用API实现智能回复机器人
2018/04/10 Python
python打开windows应用程序的实例
2019/06/28 Python
python  ceiling divide 除法向上取整(或小数向上取整)的实例
2019/12/27 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
2020/03/03 Python
python如何代码集体右移
2020/07/20 Python
J.Crew官网:美国知名休闲服装品牌
2017/05/19 全球购物
美国克罗格超市在线购物:Kroger
2019/06/21 全球购物
NICKIS.com荷兰:设计师儿童时装
2020/01/08 全球购物
公务员总结性个人自我评价
2013/12/05 职场文书
全国文明单位申报材料
2014/05/31 职场文书
2014班子成员自我剖析材料思想汇报
2014/10/01 职场文书
机关班子查摆问题及整改措施
2014/10/28 职场文书
奖金申请报告模板
2015/05/15 职场文书
小学安全教育主题班会
2015/08/12 职场文书
品牌形象定位,全面分析
2019/07/23 职场文书
MySQL中JOIN连接的基本用法实例
2022/06/05 MySQL