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 使用os.remove删除文件夹时报错的解决方法
Jan 13 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
Dec 08 Python
Python实现将Excel转换成为image的方法
Oct 23 Python
Django REST framework 视图和路由详解
Jul 19 Python
解决pyshp UnicodeDecodeError的问题
Dec 06 Python
Python下利用BeautifulSoup解析HTML的实现
Jan 17 Python
Python 3.8 新功能来一波(大部分人都不知道)
Mar 11 Python
django model通过字典更新数据实例
Apr 01 Python
Python3通过chmod修改目录或文件权限的方法示例
Jun 08 Python
python和php哪个更适合写爬虫
Jun 22 Python
用sleep间隔进行python反爬虫的实例讲解
Nov 30 Python
PyTorch中的torch.cat简单介绍
Mar 17 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
第4章 数据处理-php正则表达式-郑阿奇(续)
2011/07/04 PHP
PHP 动态生成静态HTML页面示例代码
2014/01/15 PHP
ThinkPHP在新浪SAE平台的部署实例
2014/10/31 PHP
Yii2下session跨域名共存的解决方案
2017/02/04 PHP
json格式的时间显示为正常年月日的方法
2013/09/08 Javascript
jQuery表格排序组件-tablesorter使用示例
2014/05/26 Javascript
用javascript对一个json数组深度赋值示例
2014/07/27 Javascript
JavaScript数组函数unshift、shift、pop、push使用实例
2014/08/27 Javascript
jQuery使用zTree插件实现树形菜单和异步加载
2016/02/25 Javascript
Treegrid的动态加载实例代码
2016/04/29 Javascript
node操作mysql数据库实例详解
2017/03/17 Javascript
angular4自定义组件详解
2017/09/28 Javascript
vue项目中使用Svg的方法
2018/10/24 Javascript
Element UI框架中巧用树选择器的实现
2018/12/12 Javascript
解决element ui select下拉框不回显数据问题的解决
2019/02/20 Javascript
vue+elementUI动态增加表单项并添加验证的代码详解
2020/12/17 Vue.js
[51:22]Fnatic vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python线程指南详细介绍
2017/01/05 Python
Python中Flask-RESTful编写API接口(小白入门)
2019/12/11 Python
Python使用pyyaml模块处理yaml数据
2020/04/14 Python
基于FME使用Python过程图解
2020/05/13 Python
python3.8动态人脸识别的实现示例
2020/09/21 Python
详解Python模块化编程与装饰器
2021/01/16 Python
基础的CSS3弹性盒Flexbox布局使用实例
2016/04/08 HTML / CSS
HTML5之SVG 2D入门4—笔画与填充
2013/01/30 HTML / CSS
eDreams加拿大:廉价航班、酒店和度假
2019/03/29 全球购物
计算机系毕业生推荐信
2013/11/06 职场文书
服务行业个人求职的自我评价
2013/12/12 职场文书
30岁生日感言
2014/01/25 职场文书
优秀班集体获奖感言
2014/02/03 职场文书
美术教学感言
2014/02/22 职场文书
《长城和运河》教学反思
2014/04/14 职场文书
经济贸易系毕业生求职信
2014/05/31 职场文书
作风转变年心得体会
2014/10/22 职场文书
2015年政治教研组工作总结
2015/07/22 职场文书
考生诚信考试承诺书(2016版)
2016/03/25 职场文书