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 25 Python
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
Mar 30 Python
对于Python装饰器使用的一些建议
Jun 03 Python
Python多重继承的方法解析执行顺序实例分析
May 26 Python
python如何求解两数的最大公约数
Sep 27 Python
Django利用cookie保存用户登录信息的简单实现方法
May 27 Python
python实现登录密码重置简易操作代码
Aug 14 Python
Python pip 安装与使用(安装、更新、删除)
Oct 06 Python
Python通过Tesseract库实现文字识别
Mar 05 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
Mar 31 Python
keras Lambda自定义层实现数据的切片方式,Lambda传参数
Jun 11 Python
基于python requests selenium爬取excel vba过程解析
Aug 12 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初学者头疼问题总结
2006/07/08 PHP
PHP关联数组的10个操作技巧
2013/01/21 PHP
php中filter函数验证、过滤用户输入的数据
2014/01/13 PHP
详解PHP中curl_multi并发的实现
2020/06/08 PHP
javascript使用location.search的示例
2013/11/05 Javascript
JS判断表单输入是否为空(示例代码)
2013/12/23 Javascript
seajs中模块的解析规则详解和模块使用总结
2014/03/12 Javascript
用简洁的jQuery方法toggleClass实现隔行换色
2014/10/22 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
JQuery复制DOM节点的方法
2015/06/11 Javascript
JQuery操作textarea,input,select,checkbox方法
2015/09/02 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
2016/09/19 Javascript
Bootstrap源码学习笔记之bootstrap进度条
2016/12/24 Javascript
关于AngularJs数据的本地存储详解
2017/01/20 Javascript
详解vue express启动数据服务
2017/07/05 Javascript
webpack打包html里面img后src为“[object Module]”问题
2019/12/22 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
2020/02/03 Javascript
微信小程序实现手指拖动选项排序
2020/04/22 Javascript
Python入门篇之字符串
2014/10/17 Python
python3的输入方式及多组输入方法
2018/10/17 Python
python3实现网络爬虫之BeautifulSoup使用详解
2018/12/19 Python
Python判断telnet通不通的实例
2019/01/26 Python
flask框架jinja2模板与模板继承实例分析
2019/08/01 Python
python实现录音功能(可随时停止录音)
2020/10/26 Python
css3背景_动力节点Java学院整理
2017/07/11 HTML / CSS
美国厨房和园艺工具网上商店:Nestneed
2019/08/24 全球购物
美国波西米亚风格精品店:South Moon Under
2019/10/26 全球购物
优秀交警事迹材料
2014/01/26 职场文书
高中军训感想800字
2014/02/23 职场文书
行政管理专业求职信
2014/07/06 职场文书
英语投诉信范文
2015/07/03 职场文书
公司员工违法违章行为检讨书
2019/06/24 职场文书
学校就业保障协议书
2019/06/24 职场文书
Python实现的扫码工具居然这么好用!
2021/06/07 Python
基于Go语言构建RESTful API服务
2021/07/25 Golang
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
2022/04/24 Python