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数据结构之Array用法实例
Oct 09 Python
python获取当前时间对应unix时间戳的方法
May 15 Python
详解C++编程中一元运算符的重载
Jan 19 Python
Python使用redis pool的一种单例实现方式
Apr 16 Python
python负载均衡的简单实现方法
Feb 04 Python
Django 跨域请求处理的示例代码
May 02 Python
对python文件读写的缓冲行为详解
Feb 13 Python
Python列表(List)知识点总结
Feb 18 Python
在python中实现同行输入/接收多个数据的示例
Jul 20 Python
如何用Python来搭建一个简单的推荐系统
Aug 07 Python
tensorflow使用CNN分析mnist手写体数字数据集
Jun 17 Python
Python3以GitHub为例来实现模拟登录和爬取的实例讲解
Jul 30 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
使用sockets:从新闻组中获取文章(二)
2006/10/09 PHP
腾讯QQ php程序员面试题目整理
2010/06/08 PHP
关于PHP中interface的用处详解
2020/07/26 PHP
查询绑定数据岛的表格中的文本并修改显示方式的js代码
2009/12/15 Javascript
JS与jQ读取xml文件的方法
2015/12/08 Javascript
基于jquery实现三级下拉菜单
2016/05/10 Javascript
把普通对象转换成json格式的对象的简单实例
2016/07/04 Javascript
详解JavaScript常量定义
2017/01/03 Javascript
详解Vue生命周期的示例
2017/03/10 Javascript
jQuery插件HighCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/15 Javascript
详解angularjs获取元素以及angular.element()用法
2017/07/25 Javascript
React-router v4 路由配置方法小结
2017/08/08 Javascript
利用JS实现scroll自定义滚动效果详解
2017/10/17 Javascript
node实现基于token的身份验证
2018/04/09 Javascript
Node.js API详解之 console模块用法详解
2020/05/12 Javascript
javascript实现打砖块小游戏(附完整源码)
2020/09/18 Javascript
[49:21]TNC vs VG 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第三场 8.20.mp4
2019/08/22 DOTA
Python实现优先级队列结构的方法详解
2016/06/02 Python
Python对字符串实现去重操作的方法示例
2017/08/11 Python
Python下载网络文本数据到本地内存的四种实现方法示例
2018/02/05 Python
PyCharm设置每行最大长度限制的方法
2019/01/16 Python
PyTorch中Tensor的维度变换实现
2019/08/18 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
2020/02/04 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
Windows环境下Python3.6.8 importError: DLLload failed:找不到指定的模块
2020/11/01 Python
CSS3使用transition属性实现过渡效果
2018/04/18 HTML / CSS
美国网上订购鲜花:FTD
2016/09/23 全球购物
房产销售经理职责
2013/12/20 职场文书
医院辞职信范文
2014/01/17 职场文书
学校消防安全制度
2014/01/30 职场文书
开工仪式主持词
2014/03/20 职场文书
派出所所长先进事迹
2014/05/19 职场文书
美德少年主要事迹材料
2015/11/04 职场文书
公务员岗前培训心得体会
2016/01/08 职场文书
高三数学复习备考教学反思
2016/02/18 职场文书
如何做好工作总结!
2019/04/10 职场文书