栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python在进程之间共享锁

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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()
使用
initializer
kwarg在创建池时传递常规值。这将使您的锁实例在所有子工作者中都是全局的:

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 = ldef 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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/517151.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号