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