进程同步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的主要内容,如果未能解决你的问题,请参考以下文章

08 进程池同步方法

07 进程池的同步方法和异步方法

进程池

122 Python程序中的多进程和多线程

python全栈开发,Day40(进程间通信(队列和管道),进程间的数据共享Manager,进程池Pool)

多进程 — 信号传递与进程控