Python实现多进程的四种方式

yipeiwu_com6年前Python基础

方式一: 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实现名片管理器的示例代码

编写程序,完成“名片管理器”项目 需要完成的基本功能: 添加名片 删除名片 修改名片 查询名片 退出系统 程序运行后,除非选择退出系统,否则重复执行功能 mi...

如何用OpenCV -python3实现视频物体追踪

如何用OpenCV -python3实现视频物体追踪

opencv OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系...

Python语言检测模块langid和langdetect的使用实例

之前使用数据编码风格检测的模块chardet比较多一点,今天提到的两个模块是检测数据的语言类型,比如是:中文还是英文,模块的使用方法也比较简单,我这里只是简单地使用了一下,因为项目中有这...

Python 获取div标签中的文字实例

预备知识点 compile 函数 compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。 语法...

Python学习笔记之视频人脸检测识别实例教程

Python学习笔记之视频人脸检测识别实例教程

前言 上一篇博文与大家分享了简单的图片人脸识别技术,其实在实际应用中,很多是通过视频流的方式进行识别,比如人脸识别通道门禁考勤系统、人脸动态跟踪识别系统等等。 下面话不多说了,来一起看...