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字符串详细介绍
May 09 Python
详解Python中open()函数指定文件打开方式的用法
Jun 04 Python
Python模块搜索路径代码详解
Jan 29 Python
分析python动态规划的递归、非递归实现
Mar 04 Python
python 读取目录下csv文件并绘制曲线v111的方法
Jul 06 Python
Python os.rename() 重命名目录和文件的示例
Oct 25 Python
python获取url的返回信息方法
Dec 17 Python
简单了解python的一些位运算技巧
Jul 13 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
Jul 23 Python
python函数局部变量、全局变量、递归知识点总结
Nov 15 Python
python collections模块的使用
Oct 16 Python
python元组打包和解包过程详解
Aug 02 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
destoon实现VIP排名一直在前面排序的方法
2014/08/21 PHP
php实现随机显示图片方法汇总
2015/05/21 PHP
求解开jscript.encode代码的asp函数
2007/02/28 Javascript
js电信网通双线自动选择技巧
2008/11/18 Javascript
Javascript typeof 用法
2008/12/28 Javascript
40个新鲜出炉的jQuery 插件和免费教程[上]
2012/07/24 Javascript
jQuery中:first-child选择器用法实例
2014/12/31 Javascript
JavaScript中字符串与Unicode编码互相转换的实现方法
2015/12/18 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
2016/03/08 Javascript
轻松掌握jQuery中wrap()与unwrap()函数的用法
2016/05/24 Javascript
Bootstrap基本样式学习笔记之图片(6)
2016/12/07 Javascript
JS原型与原型链的深入理解
2017/02/15 Javascript
JavaScript闭包_动力节点Java学院整理
2017/06/27 Javascript
Vue-Router进阶之滚动行为详解
2017/09/13 Javascript
js装饰设计模式学习心得
2018/02/17 Javascript
基于JavaScript实现瀑布流布局
2018/08/15 Javascript
解决vuex刷新状态初始化的方法实现
2019/08/15 Javascript
javascript中的相等操作符(==与===区别)
2019/12/21 Javascript
js判断非127开头的IP地址的实例代码
2020/01/05 Javascript
Python中统计函数运行耗时的方法
2015/05/05 Python
python实现学生管理系统
2018/01/11 Python
pip命令无法使用的解决方法
2018/06/12 Python
python在不同条件下的输入与输出
2020/02/13 Python
python编写softmax函数、交叉熵函数实例
2020/06/11 Python
VICHY薇姿美国官方网站:欧洲药房第一的抗衰老品牌
2017/11/22 全球购物
工作失误检讨书范文大全
2014/01/13 职场文书
四个太阳教学反思
2014/02/01 职场文书
诚信考试倡议书
2014/04/15 职场文书
创业培训计划书
2014/05/03 职场文书
消防安全宣传标语
2014/06/07 职场文书
设计专业毕业生求职信
2014/06/25 职场文书
教师暑期培训感言
2014/08/15 职场文书
2015学校六五普法工作总结
2015/04/22 职场文书
css3属性选择器 “~”(波浪号) “,”(逗号) “+”(加号)和 “>”(大于号)
2022/04/19 HTML / CSS
利用正则表达式匹配浮点型数据
2022/05/30 Java/Android
virtualenv隔离Python环境的问题解析
2022/06/21 Python