Python 多处理管理器类对象线程/进程安全

Posted

技术标签:

【中文标题】Python 多处理管理器类对象线程/进程安全【英文标题】:Python multiprocessing manager class object thread/process safe 【发布时间】:2018-01-01 04:12:15 【问题描述】:

我有以下在多个消费者之间共享的类(使用生产者/消费者方法)。我的问题涉及在这个类上调用的方法。我需要实现锁还是管理器类线程安全?

import multiprocessing as mp
from multiprocessing.manager import BaseManager

class SampleClass(object):

    def __init__(self):
        self._count = 0

    # Does locking need to be implemented here?
    def increment(self):
        self._count += 1

BaseManager.register('SampleClass', SampleClass)
manager = BaseManager()
manager.start()

instance = manager.SampleClass()

jobs = []
for i in range(0, 5):
    p = mp.Process(target=some_func, args=(instance,))
    jobs.append(p)
    p.start()

for p in jobs:
    p.join()

【问题讨论】:

【参考方案1】:

我想是的。正如对另一个问题的评论所说:

    multiprocessing: How do I share a dict among multiple processes?

manager.dict()这个过程安全吗?

@LorenzoBelli,如果您要询问对经理的访问是否同步,我相信答案是肯定的。 multiprocessing.Manager() 返回一个 instance of SyncManager,它的名字暗示了很多!

【讨论】:

以上是关于Python 多处理管理器类对象线程/进程安全的主要内容,如果未能解决你的问题,请参考以下文章

Python 多进程多线编程模板

进程和线程,线程安全,python如何实现多进程,多线程

[python]今天是多任务的第五天

python 多线程处理

python多进程和多线程的区别

进程和线程