没有合适的资源?快使用搜索试试~ 我知道了~
文章目录一、多进程模块multiprocessing1.1 multiprocessing.Process()1.2 join进程阻塞1.3 daemon守护进程二、进程间同步2.1 互斥锁Lock()2.2 递归锁RLock()三、进程间通信3.1 队列(推荐使用)3.2 队列的应用-生产者与消费者模式3.3 管道 参考博文 https://www.cnblogs.com/jiangfan95/p/11439207.html 一、多进程模块multiprocessing python中的多线程因为GIL的原因,无法利用多核优势,如果想要充分地使用多核CPU的资源,在python中大部分情况需
资源推荐
资源详情
资源评论
Python3进阶进阶—多进程【全】多进程【全】
文章目录文章目录一、多进程模块multiprocessing1.1 multiprocessing.Process()1.2 join进程阻塞1.3 daemon守护进程二、进程间同步
2.1 互斥锁Lock()2.2 递归锁RLock()三、进程间通信3.1 队列(推荐使用)3.2 队列的应用-生产者与消费者模式3.3 管道
参考博文 https://www.cnblogs.com/jiangfan95/p/11439207.html
一、多进程模块一、多进程模块multiprocessing
python中的多线程因为GIL的原因,无法利用多核优势,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使
用多进程,这就要用到多进程模块multiprocessing。
常用的类、方法有:常用的类、方法有:
multiprocessing.Process 用于创建子进程
multiprocessing.Queue 队列,用于进程间的数据同步、共享
multiprocessing.Pipe 管道,用于进程间的数据同步、共享
multiprocessing.Lock 互斥锁
multiprocessing.RLock 递归锁
multiprocessing.Value 用于进程间的数据同步、共享
1.1 multiprocessing.Process()
以下为Process的构造方法:
class Process(object):
def __init__(self, group=None, target=None, name=None, args=(), kwargs={}):
self.name = ''
self.daemon = False
self.authkey = None
self.exitcode = None
self.ident = 0
self.pid = 0
self.sentinel = None
从构造方法中可以看出,我们实例化一个Process进程对象时,可以填写的参数有五个:
group:该参数一般不填写,实际也没有用到
target:目标函数名,就是你在子进程中需要执行的函数,必填
name:进程名字,是字符串类型,非必填
args:target指定的函数中需要用到的参数,是一个元祖,非必填
kwargs:target指定的函数中需要用到的key-value形式的参数,是一个字典,非必填
使用multiprocess.Process()创建启动子进程,有两种方法。
方法一:直接调用方法一:直接调用Process()实例化一个进程对象实例化一个进程对象
# 方法一 直接调用
import time
import random
from multiprocessing import Process
def do_something(name):
print('%s runing' % name)
time.sleep(random.randint(2, 5))
print('%s running end' % name)
p1 = Process(target=do_something, args=('process-1',))
# 这里要注意的是args这个参数是一个元祖,当只有一个元素时,记得加逗号
p2 = Process(target=do_something, args=('process-2',))
p3 = Process(target=do_something, args=('process-3',))
p4 = Process(target=do_something, args=('process-4',))
p1.start()
p2.start()
p3.start()
p4.start()
time.sleep(1)
print('主进程结束')
方法二:继承方法二:继承Process类,重写类,重写run方法方法
# 方法二:重写run方法
import time
import random
from multiprocessing import Process
class MyProcess(Process):
def __init__(self, name):
super(MyProcess, self).__init__() # 调用父类的构造函数
self.name = name
def run(self) -> None:
print('%s runing' % self.name)
time.sleep(random.randint(2, 5))
self.do_something()
print('%s running end' % self.name)
def do_something(self):
pass
p1 = MyProcess('process-1')
# 这里要注意的是args这个参数是一个元祖,当只有一个元素时,记得加逗号
p2 = MyProcess('process-2')
p3 = MyProcess('process-3')
p4 = MyProcess('process-4')
p1.start()
p2.start()
p3.start()
p4.start()
time.sleep(1)
print('主进程结束')
1.2 join进程阻塞进程阻塞
有时我们需要等待创建的某个子进程执行完毕之后,再继续执行主进程的任务,这时候就需要用到join()这个方法。
def do_something(name):
print('%s running' % name)
if name == "process-2":
time.sleep(4)
time.sleep(1)
print('%s running end' % name)
p1 = Process(target=do_something, args=('process-1',))
p2 = Process(target=do_something, args=('process-2',))
p1.start()
p2.start()
p2.join() # 这里设置让p2进程执行完毕之后再继续执行主进程,注意 join方法需要在进程start之后才能使用
print('主进程结束')
1.3 daemon守护进程守护进程
daemon()这个方法用于设置进程为守护进程,守护进程会随着主进程结束而结束,不管它有没有执行完,具体看如下例子:
import time
from multiprocessing import Process
def do_something(name):
print('%s running' % name)
if name == "process-2":
time.sleep(4)
time.sleep(1)
print('%s running end' % name)
p1 = Process(target=do_something, args=('process-1',))
p2 = Process(target=do_something, args=('process-2',))
p2.daemon = True # 设置p2进程为守护进程,注意设置守护进程需要在进程start之前设置
p1.start()
p2.start()
time.sleep(1)
print('主进程结束')
output
process-1 running
process-2 running
process-1 running end
剩余7页未读,继续阅读
资源评论
weixin_38608693
- 粉丝: 2
- 资源: 907
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功