守护进程
如果子进程开启了守护模式,那么主进程运行完后立即干死子进程
from multiprocessing import Process
import time
# 【守护进程,会在主进程执行完毕后,被干掉】
# 【守护进程内无法再开子进程否则报错】
def task(name):
print('%s is runing' % name)
time.sleep(2)
if __name__ == '__main__':
p = Process(target=task, args=('进程1',))
p.daemon = True # 开启守护进程
p.start()
print('主进程')
互斥锁
- 类似许可证
互斥锁 和 jion的区别:
互斥锁可以局部变成串行 , 但是jion是把 整个子进程变为串行
from multiprocessing import Process
from multiprocessing import Lock # 锁的类 许可证
import time
def task(name, mutex):
mutex.acquire() # 加上锁(许可证)
print('%s 1' % name)
time.sleep(1)
print('%s 2' % name)
time.sleep(1)
print('%s 3' % name)
mutex.release() # 解除锁(许可证)
if __name__ == '__main__':
lock = Lock() # 造一把锁(许可证)
for i in range(3):
p = Process(target=task,args =('进程 %s' % i, lock)) # 把锁传给子进程(许可证)
p.start()
队列
在内存中执行列队,并且自动带锁
from multiprocessing import Queue
# 队列的数据是在内存中,所以不易存大文件数据
q = Queue() # 队列最多只有3个
q.put('hello') # 加入列队
q.put({'a': 1})
q.put([3, 3, 3])
print(q.full()) # 判断队列满了没
print(q.get())
print(q.get())
print(q.get())
print(q.empty()) # 清空队列