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使用正则表达式分析网页中的图片并进行替换的方法
Mar 26 Python
用Python程序抓取网页的HTML信息的一个小实例
May 02 Python
python查看FTP是否能连接成功的方法
Jul 30 Python
Python中数字以及算数运算符的相关使用
Oct 12 Python
学习python的前途 python挣钱
Feb 27 Python
详解PyCharm+QTDesigner+PyUIC使用教程
Jun 13 Python
python设置环境变量的原因和方法
Jun 24 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
Jul 22 Python
Django 响应数据response的返回源码详解
Aug 06 Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
Oct 11 Python
详解python中各种文件打开模式
Jan 19 Python
利用Python实现某OA系统的自动定位功能
May 27 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文件向另一个地址post数据,不用表单和隐藏的变量的
2007/03/06 PHP
PHP sprintf()函数用例解析
2011/05/18 PHP
php制作简单模版引擎
2016/04/07 PHP
php微信公众号js-sdk开发应用
2016/11/28 PHP
通过 Dom 方法提高 innerHTML 性能
2008/03/26 Javascript
教你如何解密js/vbs/vbscript加密的编码异处理小结
2008/06/25 Javascript
utf-8编码引起js输出中文乱码的解决办法
2010/06/23 Javascript
通过DOM脚本去设置样式信息
2010/09/19 Javascript
javascript 节点排序 2
2011/01/31 Javascript
有关于JS辅助函数inherit()的问题
2013/04/07 Javascript
分享我的jquery实现下拉菜单心的
2015/11/29 Javascript
防止页面url缓存中ajax中post请求的处理方法
2017/10/10 Javascript
基于 Vue 的 Electron 项目搭建过程图文详解
2020/07/22 Javascript
原生js滑动轮播封装
2020/07/31 Javascript
vue实现登录功能
2020/12/31 Vue.js
VUE实现吸底按钮
2021/03/04 Vue.js
[43:58]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第一场 1月8日
2021/03/11 DOTA
改进Django中的表单的简单方法
2015/07/17 Python
利用Python如何生成随机密码
2016/04/20 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
python 读取Linux服务器上的文件方法
2018/12/27 Python
浅谈Python爬虫基本套路
2019/03/25 Python
python处理document文档保留原样式
2019/09/23 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
2020/03/23 Python
Python基于numpy模块实现回归预测
2020/05/14 Python
python 基于wx实现音乐播放
2020/11/24 Python
美国著名首饰网站:BaubleBar
2016/08/29 全球购物
Sunglasses Shop瑞典:欧洲领先的太阳镜网上商店
2018/04/22 全球购物
伦敦一卡通:The London Pass
2018/11/30 全球购物
荷兰网上药店:Drogisterij.net
2019/09/03 全球购物
美国轻奢时尚购物网站:REVOLVE(支持中文)
2020/07/18 全球购物
新员工欢迎词
2014/01/12 职场文书
中级会计职业生涯规划书
2014/03/01 职场文书
服务质量承诺书
2014/03/27 职场文书
老舍《猫》教学反思
2016/02/17 职场文书
python游戏开发Pygame框架
2022/04/22 Python