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中read()、readline()和readlines()三者间的区别和用法
Jul 30 Python
Python分析学校四六级过关情况
Nov 22 Python
python发送邮件脚本
May 22 Python
pycharm下查看python的变量类型和变量内容的方法
Jun 26 Python
Python OpenCV读取png图像转成jpg图像存储的方法
Oct 28 Python
Python File(文件) 方法整理
Feb 18 Python
Pytorch实现GoogLeNet的方法
Aug 18 Python
python 爬取马蜂窝景点翻页文字评论的实现
Jan 20 Python
利用python画出AUC曲线的实例
Feb 28 Python
python tkinter之顶层菜单、弹出菜单实例
Mar 04 Python
Python求两个字符串最长公共子序列代码实例
Mar 05 Python
基于python实现银行管理系统
Apr 20 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/01 无线电
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
2007/05/03 PHP
简单的php文件上传(实例)
2013/10/27 PHP
php下Memcached入门实例解析
2015/01/05 PHP
php实现向javascript传递数组的方法
2015/07/27 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
2015/10/26 PHP
PHP二维数组排序简单实现方法
2016/02/14 PHP
PHP查询附近的人及其距离的实现方法
2016/05/11 PHP
PHP编写文件多服务器同步程序
2016/07/02 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
2017/02/06 PHP
php的优点总结 php有哪些优点
2019/07/19 PHP
js AspxButton的客户端操作
2009/06/26 Javascript
Jquery 最近浏览过的商品的功能实现代码
2010/05/14 Javascript
javascript类型转换使用方法
2014/02/08 Javascript
JavaScript显示表单内元素数量的方法
2015/04/02 Javascript
基于JavaScript实现定时跳转到指定页面
2016/01/01 Javascript
深入理解Vue-cli搭建项目后的目录结构探秘
2017/07/13 Javascript
在vue中添加Echarts图表的基本使用教程
2017/11/22 Javascript
深入理解ES6中let和闭包
2018/02/22 Javascript
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
详解如何在微信小程序中愉快地使用sass
2018/07/30 Javascript
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
python正则实现提取电话功能
2018/02/24 Python
python基础教程项目五之虚拟茶话会
2018/04/02 Python
Python中矩阵创建和矩阵运算方法
2018/08/04 Python
python os.path.isfile 的使用误区详解
2019/11/29 Python
numpy np.newaxis 的实用分享
2019/11/30 Python
基于梯度爆炸的解决方法:clip gradient
2020/02/04 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
2020/02/25 Python
Python接口测试文件上传实例解析
2020/05/22 Python
Python如何基于Tesseract实现识别文字功能
2020/06/05 Python
Python 实现二叉查找树的示例代码
2020/12/21 Python
自定义html标记替换html5新增元素
2008/10/17 HTML / CSS
美国领先的在线旅游网站:Orbitz
2018/11/05 全球购物
企业演讲稿范文大全
2014/05/20 职场文书