Python实现多进程的四种方式
作者:Money多多 发布时间:2022-03-14 10:48:46
标签: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()
来源:https://blog.csdn.net/topleeyap/article/details/78981848


猜你喜欢
- 一、下载安装包http://www.php.net/downloads.php获取下载地址wgethttp://hk1.php.net/di
- edt_color_slt.jsvar _r = ""; var color_t
- 一、背景:在平时工作中有遇到端口检测,查看服务端特定端口是否对外开放,常用nmap,tcping,telnet等,同时也可以利用站长工具等w
- 一、开发工具**Python****版本:**3.6.4相关模块:DecryptLogin模块;argparse模块;以及一些Python自
- AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用
- 在上篇博客中,提到了对一个脚本进行的多次优化。当时以为已经优化得差不多了,但是当测试人员测试时,我才发现,踩到了Python的一个大坑。在上
- 1、修改本地化时间原理: 本地化时间格式化需要gettext支持, 假如你的环境没有开启此功能, 将会返回乱码, 影响#phpmyadmin
- 在使用google或者baidu搜图的时候会发现有一个图片颜色选项,感觉非常有意思,有人可能会想这肯定是人为的去划分的,呵呵,有这种可能,但
- 在使用Sublime Text3 的时候导numpy的包发现报错,找不到这个包,这是因为要配置pip源才能正常导包,进行from numpy
- 解包在英文里叫做 Unpacking,就是将容器里面的元素逐个取出来放在其它地方,好比你父母去菜市场买了一袋苹果回来分别发给家里的每个成员,
- 一、常见的异常1、NameError 未定义变量异常print(a)# 输出:NameError: name 'a' is
- 本文实例讲述了Python面向对象程序设计类的封装与继承用法。分享给大家供大家参考,具体如下:访问限制(封装)1、概念面向对象语言的三大特征
- 首先上结构mynode -> app5 -> urls.py & views.py| -> templates -
- pycharm from lxml import etree标红##原因:没有lxml这个包###解决方法:需要安装xlml包####下载地
- mock简介mock原是python的第三方库python3以后mock模块已经整合到了unittest测试框架中,不用再单独安装Mock这
- 怎么增大MySQL数据库连接数,MYSQL数据库安装完成后,默认连接数是100,流量稍微大一点的论坛或网站这个连接数是不够哟用
- 引言随着我被拉入一个新的群聊“生产环境死锁问题排查解决”,打破了午后的悠然惬意,点开群聊秒送了一个6
- panic和recover使用Go语言不支持传统的 try…catch…finally 这种异常
- 目录什么是websocket?第一步 准备工作第二步 编写聊天室页面第三步 编写后台websocket路由及处理方法第四步 运行看效果小结C
- http://www.gotapi.com/ 语言:英语 简介:HTML,CSS,XPATH,XSL,JAVASCRIP