如何在Python中使类成员进程安全

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Python中使类成员进程安全相关的知识,希望对你有一定的参考价值。

我正在一个类上执行一些任务,它通过迭代器生成多个进程,以使每个条目都被处理一次。代码如下:

import multiprocessing as mp

Class MyClass():
    def __init__():
        self.index=[blabla]
        self.iterator=0
        self.workers=[mp.Process(target=self.worker, args=(self.lock, args) for i in range(10)]
    def worker(self, lock, args):
        # I intend to use lock to make only one subprocs read index 
        # list until iterator goes to next 
        while some_condition:
            lock.acquire()
            now_item=self.index[self.iterator]
            self._next_iter()
            lock.release()
            ...# do something on now_item
    def._next_iter(self):
        #do some checks and +1 on iterator

但似乎所有子进程都在iterator = 0处启动并执行自己的循环。我知道可以将它们与Queue()对象同步,但是如果我们不使用它会怎么样?

答案

进程之间不共享内存。因此,应用于进程中变量的更改不会传播给兄弟节点。

要在Python中跨进程共享变量,您可以查看multiprocessing模块提供的原语。在你的特殊情况下,shared value应该足够了。

以上是关于如何在Python中使类成员进程安全的主要内容,如果未能解决你的问题,请参考以下文章

如何在 .net 中使类可序列化而无需 Serializable 属性

python中使类方法像属性一样被使用

如何在Asp .Net Web API中的请求的整个生命周期中使类对象可用?

在 Boost.MPI 中使类可序列化是啥意思?

在Boost.MPI中使类可序列化是什么意思?

如何使类的成员只能在任何包的子类中访问?