进程同步Lock,进程池Pool
Posted 管控念头
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程同步Lock,进程池Pool相关的知识,希望对你有一定的参考价值。
import multiprocessing, time, os
\'\'\'进程同步Lock\'\'\'
# def foo(l, i):
# l.acquire()
# print(\'hello world %s\' % i)
# l.release()
#
# if __name__ == \'__main__\':
# l = multiprocessing.Lock() # 也是Lock锁
# l1 = []
# for i in range(10):
# p = multiprocessing.Process(target=foo, args=(l, i,))
# p.start()
# l1.append(p)
# for t in l1:
# t.join()
\'\'\'
进程池Pool:
内部维护一个进程序列,当使用时,则去进程池中获取一个进程,如果进程池序列中没有可供使用的进程,那么程序就会等待,直到进程池中有可用进程为止。
\'\'\'
def foo(n):
time.sleep(1)
print(n)
return \'foo %s\' % n
def bar(m):
\'\'\'bar函数为回调函数,那么foo的返回值会作为参数传给bar函数,bar函数可用来打印日志\'\'\'
print(m)
# print(\'hello\')
# print(\'two:\', os.getpid())
# print(\'two:\', os.getppid())
if __name__ == \'__main__\':
pool = multiprocessing.Pool(5) # 参数5进程池数量,如果为空则默认使用的是本机核数
# print(\'one:\', os.getpid())
# print(\'one:\', os.getppid())
for x in range(100):
# pool.apply(func=foo, args=(x,)) # apply()同步接口,apply和apply_async直接创建了子进程
# pool.apply_async(func=foo, args=(x,))
pool.apply_async(func=foo, args=(x,), callback=bar)
# callback回调函数,就是某个动作或者函数执行成功后再去执行的函数;主进程创建子进程,callback回调函数是由主进程执行的,通过打印进程号就可发现
pool.close()
pool.join() # 必须是先close后join,这是固定顺序
print(\'end\')
以上是关于进程同步Lock,进程池Pool的主要内容,如果未能解决你的问题,请参考以下文章