multiprocessing.Process子类中的类变量

我正在写一个纸牌模拟器来收集统计数据,我想并行化以同时在所有内核上运行游戏。为此,我编写了multiprocessing.Process的子目录,并累积了所有线程的结果,我尝试使用所有线程在锁定部分中写入的类变量。这是我的代码:

class Parallel(multiprocessing.Process):

  sum = 0
  res = []
  lock = multiprocessing.Lock()

  def __init__(self,N,id):
      super(Parallell,self).__init__()
      self.sum = 0
      self.N = N
      self.res = []
      self.id = id

  def run(self):
      # Play N games to generate local sum and result list
      self.writeFinalData()

  def writeFinalData(self):
      Parallel.lock.acquire()
      Parallel.sum += self.sum
      Parallel.res = Parallel.res + self.res
      Parallel.lock.release()

      # Following simply prints sum and res for this instance,it is not
      # accumulated/concatenated with results from other threads
      print(Parallel.sum)
      print(Parallel.res)

在我看来,这很好,但是运行该程序后,似乎每个线程完成后都会覆盖类变量中已经存在的内容。如果以前有一个线程在其中写一个数字到 sum 和一个列表到 res ,那么当新线程锁定并写入时,这些都将消失。

我无法理解这种行为。在我看来,似乎每个线程都应该追加和添加,而不是覆盖,但是显然并非如此。任何帮助将不胜感激。

iCMS 回答:multiprocessing.Process子类中的类变量

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/1880099.html

大家都在问