Python实现多进程的四种方式

作者:Money多多 时间:2022-03-14 10:48:46 

方式一: 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()

来源:https://blog.csdn.net/topleeyap/article/details/78981848

标签:python,多进程
0
投稿

猜你喜欢

  • 使用Python实现分别输出每个数组

    2021-10-30 00:28:49
  • python数据库操作指南之PyMysql使用详解

    2023-01-02 04:04:17
  • Django中URL视图函数的一些高级概念介绍

    2021-04-14 13:35:21
  • python中几种自动微分库解析

    2022-12-20 18:24:02
  • Python字符串转换成浮点数函数分享

    2022-10-04 01:04:37
  • Python hashlib常见摘要算法详解

    2023-07-29 20:04:09
  • 对python中assert、isinstance的用法详解

    2022-04-29 14:10:54
  • Django项目使用CircleCI的方法示例

    2022-10-17 11:43:24
  • pycharm创建并使用虚拟环境的详细图文教程

    2022-05-27 18:19:51
  • Python实现二维数组输出为图片

    2022-10-07 21:49:55
  • Python使用chardet判断字符编码

    2021-05-14 03:03:52
  • mysql 5.7.21 winx64免安装版配置方法图文教程

    2024-01-23 17:16:13
  • 美图秀秀web开放平台--PHP流式上传和表单上传示例分享

    2023-11-15 08:34:42
  • 详解使用Visual Studio Code对Node.js进行断点调试

    2023-07-01 07:32:34
  • 基于matplotlib xticks用法详解

    2022-10-09 12:51:31
  • Python文件处理

    2022-08-08 10:22:01
  • python设置环境变量的作用整理

    2022-09-01 17:08:55
  • ASP.NET程序中用Repeater实现分页

    2024-05-09 09:02:48
  • PHP实现上传文件并存进数据库的方法

    2023-07-03 21:35:14
  • JS 类型转换常见方法小结

    2024-04-17 09:49:17
  • asp之家 网络编程 m.aspxhome.com