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基础教程之对象和类的实际运用
Aug 29 Python
Django使用中间键实现csrf认证详解
Jul 22 Python
Python Pandas数据中对时间的操作
Jul 30 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
Aug 05 Python
基于python中__add__函数的用法
Nov 25 Python
解决Tensorflow占用GPU显存问题
Feb 03 Python
Python之Django自动实现html代码(下拉框,数据选择)
Mar 13 Python
Python开发企业微信机器人每天定时发消息实例
Mar 17 Python
Django form表单与请求的生命周期步骤详解
Jun 07 Python
Python 解析库json及jsonpath pickle的实现
Aug 17 Python
容易被忽略的Python内置类型
Sep 03 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中使用unset销毁变量并内存释放问题
2012/07/05 PHP
php实现自动获取生成文章主题关键词功能的深入分析
2013/06/03 PHP
PHP提高编程效率的20个要点
2015/09/23 PHP
PHP开发中常用的十个代码样例
2016/02/02 PHP
php分页原理 分页代码 分页类制作教程
2016/09/23 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
thinkPHP框架整合tcpdf插件操作示例
2018/08/07 PHP
解决Laravel5.5下的toArray问题
2019/10/15 PHP
Ext面向对象开发实践(续)
2008/11/18 Javascript
javascript在子页面中函数无法调试问题解决方法
2014/01/17 Javascript
javascript修改IMG标签的src问题
2014/03/28 Javascript
jquery控制背景音乐开关与自动播放提示音的方法
2015/02/06 Javascript
JS时间特效最常用的三款
2015/08/19 Javascript
js实现随屏幕滚动的带缓冲效果的右下角广告代码
2015/09/04 Javascript
微信小程序 使用canvas制作K线实例详解
2017/01/12 Javascript
Nodejs实现多房间简易聊天室功能
2017/06/20 NodeJs
JavaScript实现修改伪类样式
2017/11/27 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
2018/03/28 jQuery
NodeJs搭建本地服务器之使用手机访问的实例讲解
2018/05/12 NodeJs
echarts同一页面中四个图表切换的js数据交互方法示例
2018/07/03 Javascript
Layer UI表格列日期格式化及取消自动填充日期的实现方法
2020/05/10 Javascript
vue+ElementUI 关闭对话框清空验证,清除form表单的操作
2020/08/06 Javascript
[12:21]VICI vs TNC (BO3)
2018/06/07 DOTA
python实现判断数组是否包含指定元素的方法
2015/07/15 Python
Python二进制串转换为通用字符串的方法
2018/07/23 Python
Django app配置多个数据库代码实例
2019/12/17 Python
python 的topk算法实例
2020/04/02 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
Python xlwings插入Excel图片的实现方法
2021/02/26 Python
Ariat英国官网:为世界顶级马术运动员制造最优质的鞋类和服装
2020/02/14 全球购物
农村改厕实施方案
2014/03/22 职场文书
市级绿色学校申报材料
2014/08/25 职场文书
校运动会广播稿300字
2014/10/07 职场文书
高考百日冲刺决心书
2015/09/23 职场文书
特别篇动画《总之就是非常可爱 ~制服~》PV公开,2022年夏季播出
2022/04/04 日漫
Python使用DFA算法过滤内容敏感词
2022/04/22 Python