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 14 Python
浅析Python中else语句块的使用技巧
Jun 16 Python
用python写一个windows下的定时关机脚本(推荐)
Mar 21 Python
Django实现简单分页功能的方法详解
Dec 05 Python
python实现随机梯度下降(SGD)
Mar 24 Python
django中的HTML控件及参数传递方法
Mar 20 Python
python-str,list,set间的转换实例
Jun 27 Python
python实现烟花小程序
Jan 30 Python
Python面向对象之继承原理与用法案例分析
Dec 31 Python
记一次pyinstaller打包pygame项目为exe的过程(带图片)
Mar 02 Python
如何把python项目部署到linux服务器
Aug 26 Python
OpenCV-Python实现人脸美白算法的实例
Jun 11 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
颠覆常识!无色透明的咖啡诞生了(中日双语)
2021/03/03 咖啡文化
PHP下打开phpMyAdmin出现403错误的问题解决方法
2013/05/23 PHP
详解php语言最牛掰的Laravel框架
2017/11/20 PHP
jQuery 操作下拉列表框实现代码
2010/02/22 Javascript
javascript 判断数组是否已包含了某个元素的函数
2010/05/30 Javascript
jquery之empty()与remove()区别说明
2010/09/10 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
js控制当再次点击按钮时的间隔时间
2014/06/03 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
BootStrap点击下拉菜单项后显示一个新的输入框实现代码
2016/05/16 Javascript
基于AngularJs + Bootstrap + AngularStrap相结合实现省市区联动代码
2016/05/30 Javascript
nodejs中使用HTTP分块响应和定时器示例代码
2017/03/19 NodeJs
bootstrap suggest搜索建议插件使用详解
2017/03/25 Javascript
以v-model与promise两种方式实现vue弹窗组件
2018/05/21 Javascript
微信小程序实现工作时间段选择
2019/02/15 Javascript
记一次Vue.js混入mixin的使用(分权限管理页面)
2019/04/17 Javascript
ng-alain的sf如何自定义部件的流程
2020/06/12 Javascript
[59:42]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python爬取读者并制作成PDF
2015/03/10 Python
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
Python抓取框架 Scrapy的架构
2016/08/12 Python
python决策树之C4.5算法详解
2017/12/20 Python
基于tensorflow加载部分层的方法
2018/07/26 Python
关于TensorFlow新旧版本函数接口变化详解
2020/02/10 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
基于python 将列表作为参数传入函数时的测试与理解
2020/06/05 Python
python 还原梯度下降算法实现一维线性回归
2020/10/22 Python
python中xlutils库用法浅析
2020/12/29 Python
python基于爬虫+django,打造个性化API接口
2021/01/21 Python
VICHY薇姿俄罗斯官方网上商店:法国护肤品牌,火山温泉水
2019/11/22 全球购物
市场开发与营销专业求职信范文
2014/05/01 职场文书
优秀驾驶员先进事迹材料
2014/05/04 职场文书
考生诚信考试承诺书
2015/04/29 职场文书
用React Native制作一个简单的游戏引擎
2021/05/27 Javascript
Mysql systemctl start mysqld报错的问题解决
2021/06/03 MySQL
防止web项目中的SQL注入
2021/12/06 MySQL