python manager是进程安全的么_Python在进程之间共享锁
抱歉,我應該已經回答您其他問題了。您不能將普通multiprocessing.Lock對象傳遞給Pool方法,因為它們不能被腌制。有兩種方法可以解決此問題。一種是創建Manager()并傳遞一個Manager.Lock():
def main():
iterable = [1, 2, 3, 4, 5]
pool = multiprocessing.Pool()
m = multiprocessing.Manager()
l = m.Lock()
func = partial(target, l)
pool.map(func, iterable)
pool.close()
pool.join()
不過,這有點重量級;使用Manager需要產生另一個進程來托管Manager服務器。并且所有對acquire/ release鎖的調用都必須通過IPC發送到該服務器。
另一個選擇是multiprocessing.Lock()使用initializerkwarg 在創建池時傳遞常規值。這將使您的鎖實例在所有子工作者中都是全局的:
def target(iterable_item):
for item in items:
# Do cool stuff
if (... some condition here ...):
lock.acquire()
# Write to stdout or logfile, etc.
lock.release()
def init(l):
global lock
lock = l
def main():
iterable = [1, 2, 3, 4, 5]
l = multiprocessing.Lock()
pool = multiprocessing.Pool(initializer=init, initargs=(l,))
pool.map(target, iterable)
pool.close()
pool.join()
第二種解決方案具有不再需要的副作用partial。
總結
以上是生活随笔為你收集整理的python manager是进程安全的么_Python在进程之间共享锁的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 测试硬盘读写速度软件_Linux 测试
- 下一篇: python朋友圈评论_利用Python