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多线程编程(五):死锁的形成
Apr 05 Python
Python正则表达式经典入门教程
May 22 Python
python 实现将字典dict、列表list中的中文正常显示方法
Jul 06 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
Jul 11 Python
用xpath获取指定标签下的所有text的实例
Jan 02 Python
Django数据库类库MySQLdb使用详解
Apr 28 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
Dec 04 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
Mar 19 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
Apr 22 Python
python怎么提高计算速度
Jun 11 Python
python try...finally...的实现方法
Nov 25 Python
pytorch DataLoader的num_workers参数与设置大小详解
May 28 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 数组入门教程小结
2009/05/20 PHP
PHP 彩色文字实现代码
2009/06/29 PHP
PHP使用xmllint命令处理xml与html的方法
2014/12/15 PHP
thinkPHP5.0框架开发规范简介
2017/03/25 PHP
实例分析PHP将字符串转换成数字的方法
2019/01/27 PHP
php连接sftp的作用以及实例代码
2019/09/23 PHP
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
2013/08/19 Javascript
Vue.js组件tree实现无限级树形菜单
2016/12/02 Javascript
Bootstrap select多选下拉框实现代码
2016/12/23 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
2017/02/14 Javascript
JS中cookie的使用及缺点讲解
2017/05/13 Javascript
jquery实现放大镜简洁代码(推荐)
2017/06/08 jQuery
vue-cli2.0转3.0之项目搭建的详细步骤
2018/12/11 Javascript
js实现全选和全不选
2020/07/28 Javascript
[36:05]DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs Optic
2018/04/01 DOTA
Python标准库之随机数 (math包、random包)介绍
2014/11/25 Python
Python的Flask站点中集成xhEditor文本编辑器的教程
2016/06/13 Python
python 根据正则表达式提取指定的内容实例详解
2016/12/04 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
2019/01/14 Python
Python之循环结构
2019/01/15 Python
Python爬取知乎图片代码实现解析
2019/09/17 Python
pytorch AvgPool2d函数使用详解
2020/01/03 Python
将labelme格式数据转化为标准的coco数据集格式方式
2020/02/17 Python
Django使用list对单个或者多个字段求values值实例
2020/03/31 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
使用css实现android系统的loading加载动画
2019/07/25 HTML / CSS
日本热销NO.1胶原蛋白冻:Aishitoto爱希特多
2019/06/20 全球购物
Hanky Panky官方网站:内衣和睡衣
2019/07/25 全球购物
有趣、实用和鼓舞人心的产品:Inspire Uplift
2019/11/05 全球购物
日本动漫周边服饰销售网站:Atsuko
2019/12/16 全球购物
为什么要有struct关键字
2012/05/08 面试题
华为python面试题
2016/05/03 面试题
医学生个人求职信范文
2014/02/07 职场文书
法律进机关实施方案
2014/03/12 职场文书
幼师辞职信怎么写
2015/02/27 职场文书
详解RedisTemplate下Redis分布式锁引发的系列问题
2021/04/27 Redis