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中使用百度音乐搜索的api下载指定歌曲的lrc歌词
Jul 18 Python
python实现爬虫统计学校BBS男女比例之数据处理(三)
Dec 31 Python
python创建列表和向列表添加元素的实现方法
Dec 25 Python
python 获取list特定元素下标的实例讲解
Apr 09 Python
Python生成短uuid的方法实例详解
May 29 Python
python实现简单tftp(基于udp协议)
Jul 30 Python
Pycharm之快速定位到某行快捷键的方法
Jan 20 Python
Python图像处理之图片文字识别功能(OCR)
Jul 30 Python
Django 解决上传文件时,request.FILES为空的问题
May 20 Python
Django 构建模板form表单的两种方法
Jun 14 Python
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
May 25 Python
python可视化之颜色映射详解
Sep 15 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 cout<<的一点看法
2010/01/24 PHP
PHP验证码类代码( 最新修改,完全定制化! )
2010/12/02 PHP
PHP仿博客园 个人博客(1) 数据库与界面设计
2013/07/05 PHP
php之Smarty模板使用方法示例详解
2014/07/08 PHP
php array_merge_recursive 数组合并
2016/10/26 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
2020/04/06 PHP
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
仿百度的关键词匹配搜索示例
2013/09/25 Javascript
ExtJS4如何给同一个formpanel不同的url
2014/05/02 Javascript
JavaScript设计模式之单件模式介绍
2014/12/28 Javascript
jQuery中trigger()方法用法实例
2015/01/19 Javascript
javascript瀑布流式图片懒加载实例
2020/06/28 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐)
2016/06/23 Javascript
BootStrap Fileinput的使用教程
2016/12/30 Javascript
js实现web调用摄像头 js截取视频画面
2019/04/21 Javascript
如何获取vue单文件自身源码路径
2019/05/06 Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
2019/07/23 Javascript
jQuery提示框插件SweetAlert用法分析
2019/08/05 jQuery
解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题
2019/10/25 Javascript
python函数装饰器用法实例详解
2015/06/04 Python
Python函数式编程指南(一):函数式编程概述
2015/06/24 Python
Tensorflow实现AlexNet卷积神经网络及运算时间评测
2018/05/24 Python
详解python校验SQL脚本命名规则
2019/03/22 Python
如何运行带参数的python脚本
2019/11/15 Python
Python如何实现后端自定义认证并实现多条件登陆
2020/06/22 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
纯CSS3实现的8种Loading动画效果
2014/07/05 HTML / CSS
css3动画效果小结(推荐)
2016/07/25 HTML / CSS
美国单身专业人士在线约会网站:EliteSingles
2019/03/19 全球购物
《蒙娜丽莎之约》教学反思
2014/02/27 职场文书
幼儿园教师获奖感言
2014/03/11 职场文书
《最佳路径》教学反思
2014/04/13 职场文书
财务部副经理岗位职责范本
2014/06/17 职场文书
撤诉申请怎么写
2015/05/19 职场文书
初中班主任工作随笔
2015/08/15 职场文书
JavaWeb Servlet开发注册页面实例
2022/04/11 Java/Android