目录
- 什么是进程池
- 进程池的创建
- 进程锁
- 进程锁的用法
什么是进程池
- 进程池中的进程不会被关闭(进程号相同),可以反复利用,避免了关闭与创建的消耗
进程池的创建-multiprocessing
进程锁
- 能够让锁后面的工作只能被一个人或一个任务来处理,只有它解锁之后下一个才会进入
进程锁的加锁与解锁
from multiprocessing import Manager
manage = Manager()
lock = manage.Lock()
实战
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time : 2021/8/28 14:46
# @Author : InsaneLoafer
# @File : process_pool_lock.py
import os
import time
import multiprocessing
def work(count, lock):
lock.acquire() # 加锁,只允许一个进程运行
print(count, os.getpid())
time.sleep(5) # 阻塞5s
lock.release() # 解锁
return 'result is %s, pid is %s' % (count, os.getpid())
if __name__ == '__main__':
pool = multiprocessing.Pool(5) # 创建具有5个进程的进程池
manager = multiprocessing.Manager()
lock = manager.Lock()
results = []
for i in range(20):
result = pool.apply_async(func=work, args=(i, lock))
# results.append(result)
#
# for res in results:
# print(res.get())
pool.close()
pool.join()
1 42560
4 42260
0 12920
2 40072
3 20852
5 42560
6 42260
7 12920
8 40072
9 20852
10 42560
11 42260
12 12920
13 40072
14 20852
15 42560
16 42260
17 12920
18 40072
19 20852
Process finished with exit code 0