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的一些用法分享
Oct 07 Python
python实现解数独程序代码
Apr 12 Python
python topN 取最大的N个数或最小的N个数方法
Jun 04 Python
python中的协程深入理解
Jun 10 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
Jul 04 Python
python set集合使用方法解析
Nov 05 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
Nov 29 Python
python3.x中安装web.py步骤方法
Jun 23 Python
OpenCV Python实现图像指定区域裁剪
Mar 12 Python
Python3以GitHub为例来实现模拟登录和爬取的实例讲解
Jul 30 Python
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
Apr 06 Python
Python实现简单的俄罗斯方块游戏
Sep 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跨时区(UTC时间)应用解决方案
2013/01/11 PHP
非常好用的Zend Framework分页类
2014/06/25 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
2016/11/04 PHP
Laravel 实现数据软删除功能
2019/08/21 PHP
用javascript连接access数据库的方法
2006/11/17 Javascript
JQUERY操作JSON实例代码
2010/02/09 Javascript
jQuery选择器源码解读(三):tokenize方法
2015/03/31 Javascript
js实现div模拟模态对话框展现URL内容
2016/05/27 Javascript
使用DeviceOne实现微信小程序功能
2016/12/29 Javascript
vue实现的上传图片到数据库并显示到页面功能示例
2018/03/17 Javascript
Vue使用json-server进行后端数据模拟功能
2018/04/17 Javascript
js实现购物车功能
2018/06/12 Javascript
Angular6 正则表达式允许输入部分中文字符
2018/09/10 Javascript
了解javascript中的Dom操作
2019/05/27 Javascript
生成无限制的微信小程序码的示例代码
2019/09/20 Javascript
[03:55]TI9战队采访——TNC Predator
2019/08/22 DOTA
python threading模块操作多线程介绍
2015/04/08 Python
python处理Excel xlrd的简单使用
2017/09/12 Python
浅谈numpy数组中冒号和负号的含义
2018/04/18 Python
Python 编程速成(推荐)
2019/04/15 Python
pandas实现将日期转换成timestamp
2019/12/07 Python
BeautifulSoup获取指定class样式的div的实现
2020/12/07 Python
CSS3中利用animation属性创建雪花飘落特效
2014/05/14 HTML / CSS
使用CSS3设计地图上的雷达定位提示效果
2016/04/05 HTML / CSS
Mankind西班牙男士护肤品网站:购买皮肤护理、护发和剃须
2017/04/27 全球购物
美国在线和移动免费会员制批发零售商:Boxed(移动端的Costco)
2020/01/02 全球购物
Java多态性的定义以及类型
2014/09/16 面试题
酒店司机岗位职责
2013/12/14 职场文书
先进班级集体事迹材料
2014/01/30 职场文书
2014年秋季开学典礼主持词
2014/08/02 职场文书
2014年有孩子的离婚协议书范本
2014/10/08 职场文书
2014年终工作总结范本
2014/12/15 职场文书
涨价通知
2015/04/23 职场文书
送给自己的励志语句:要安静的优秀,悄无声息的坚强
2019/11/26 职场文书
tensorflow学习笔记之tfrecord文件的生成与读取
2021/03/31 Python