Python 3:RuntimeError:同步对象只能通过继承在进程之间共享

Sum*_*ron 6 python python-3.x python-multiprocessing

我有一个相当简单的类,类似于:

class Tick:
    def __init__():
        self.val = Value('i', 0)
        self.lock = Lock()

    def tick(self):
        self.lock().acquire()
        try:
            self.val.value = self.val.value  + 1
        finally:
            self.lock.release()

Run Code Online (Sandbox Code Playgroud)

我想将它与星图一起使用:

def mp_tick(a, t):
    t.tick()

tick = Tick()

with Pool(processes=4) as pool:
    pool.starmap(mp_tick, [(i, tick) for i in range(100)]
Run Code Online (Sandbox Code Playgroud)

抛出:

RuntimeError: Synchronized objects should only be shared between processes through inheritance
Run Code Online (Sandbox Code Playgroud)

然而:

RuntimeError: Synchronized objects should only be shared between processes through inheritance
Run Code Online (Sandbox Code Playgroud)

才不是。我知道为什么第二个有效。我不明白为什么第一个失败。

理想情况下,我希望有一个Tick可以传递给多个线程的实例,并Tick处理锁定和设置自己的值。我不希望函数必须假设存在全局变量。