因为需要控制进程数量,所以使用进程池,涉及到数据库的读写,需要在写入的时候加锁 pool.map只接受一个参数比较不好用,所以选择可接受多参数的pool.apply_async
# 进程池 全局锁+p.apply_async 替代pool.map
from multiprocessing import Pool, Lock
import time
def d(n, k):
print(n)
print(k)
lock.acquire()
print(n, "锁住")
# 写入数据库
time.sleep(3)
lock.release()
print(n, "over")
def init(l):
global lock
lock = l
if __name__ == '__main__':
lock = Lock()
p = Pool(10, initializer=init, initargs=(lock,))
for i in range(20):
p.apply_async(d, (i, "hello"))