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入门_条件控制(详解)
May 16 Python
Python 循环终止语句的三种方法小结
Jun 24 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
Jul 19 Python
Python中join()函数多种操作代码实例
Jan 13 Python
详解Python的三种拷贝方式
Feb 11 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
Mar 11 Python
Django Admin设置应用程序及模型顺序方法详解
Apr 01 Python
详解python程序中的多任务
Sep 16 Python
Python调用飞书发送消息的示例
Nov 10 Python
python re的findall和finditer的区别详解
Nov 15 Python
python制作抽奖程序代码详解
Jan 15 Python
python+selenium爬取微博热搜存入Mysql的实现方法
Jan 27 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 无线电
用PHP实现ODBC数据分页显示一例
2006/10/09 PHP
php自动获取目录下的模板的代码
2010/08/08 PHP
php教程 插件机制在PHP中实现方案
2012/11/02 PHP
PHP中鲜为人知的10个函数
2014/02/28 PHP
Ubuntu12下编译安装PHP5.3开发环境
2015/03/27 PHP
thinkphp的dump函数无输出实例代码
2016/11/15 PHP
php创建类并调用的实例方法
2019/09/25 PHP
Yii框架Session与Cookie使用方法示例
2019/10/14 PHP
jQuery 剧场版 你必须知道的javascript
2009/05/27 Javascript
Javascript 检测键盘按键信息及键码值对应介绍
2013/01/03 Javascript
js调用css属性写法
2013/09/21 Javascript
Area 区域实现post提交数据的js写法
2014/04/22 Javascript
jQuery Ajax()方法使用指南
2014/11/19 Javascript
JS实现文档加载完成后执行代码
2015/07/09 Javascript
jquery点击改变class并toggle的实现代码
2016/05/15 Javascript
使用jquery给指定的table动态添加一行、删除一行
2016/10/13 Javascript
js eval函数使用,js对象和字符串互转实例
2017/03/06 Javascript
Bootstrap按钮组简单实现代码
2017/03/06 Javascript
详解在vue-cli中使用路由
2017/09/25 Javascript
解决vue处理axios post请求传参的问题
2018/03/05 Javascript
vue 中 beforeRouteEnter 死循环的问题
2019/04/23 Javascript
Python排序搜索基本算法之归并排序实例分析
2017/12/08 Python
基于Python实现定时自动给微信好友发送天气预报
2018/10/25 Python
python-opencv颜色提取分割方法
2018/12/08 Python
Python函数返回不定数量的值方法
2019/01/22 Python
python实现五子棋人机对战游戏
2020/03/25 Python
Python计算IV值的示例讲解
2020/02/28 Python
Python正则表达式学习小例子
2020/03/03 Python
Python列表嵌套常见坑点及解决方案
2020/09/30 Python
我的珠宝盒:Ma boîte à bijoux
2019/08/27 全球购物
高校教师个人总结
2015/02/10 职场文书
“学党章、守党纪、讲党规”学习心得体会
2016/01/14 职场文书
《蚂蚁和蝈蝈》教学反思
2016/02/22 职场文书
SQL SERVER中常用日期函数的具体使用
2021/04/08 SQL Server
详解 TypeScript 枚举类型
2021/11/02 Javascript