如何使用多处理在 Python 中的进程之间共享锁

Linda Hamilton
发布: 2024-10-17 11:12:02
原创
909 人浏览过

How to Share a Lock Between Processes in Python Using Multiprocessing

在 Python 中的进程之间共享锁

当尝试使用 pool.map() 来定位具有多个参数(包括 Lock() 对象)的函数时,它是对于解决子进程之间共享锁的问题至关重要。由于 pickling 的限制,传统的 multiprocessing.Lock() 无法直接传递给 Pool 方法。

选项 1:使用 Manager 和 Manager.Lock()

一种方法是利用 Manager()并实例化一个 Manager.Lock()。虽然此方法很可靠,但由于托管 Manager 服务器的额外进程,它会涉及更多开销。此外,锁定操作需要通过 IPC 与此服务器进行通信。

选项 2:使用初始化器在创建池时传递锁定

或者,您可以在池初始化期间使用常规 multiprocessing.Lock() 传递初始化关键字参数。这确保了锁实例在所有子进程中都是全局的。此方法消除了部分功能的必要性并简化了流程。

这是使用选项 2 的示例:

<code class="python">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()</code>
登录后复制

以上是如何使用多处理在 Python 中的进程之间共享锁的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板