只能通过继承在进程之间共享获取队列对象,但我没有使用队列

本教程将介绍只能通过继承在进程之间共享获取队列对象,但我没有使用队列的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

只能通过继承在进程之间共享获取队列对象,但我没有使用队列 教程 第1张

问题描述

我正在尝试使用ProcessPoolExecutor,但收到错误"队列对象应仅通过继承在进程之间共享",但我没有使用队列(至少没有显式使用)。我找不到任何东西来解释我做错了什么。

以下是演示该问题的一些代码(不是我的实际代码):

from concurrent.futures import ProcessPoolExecutor, as_completed

class WhyDoesntThisWork:

 def __init__(self):
  self.executor = ProcessPoolExecutor(4)

 def execute_something(self, starting_letter):
  futures = [self.executor.submit(self.something, starting_letter, d) for d in range(4)]
  letter = None
  for future in as_completed(futures):
letter = future.result()
  print(letter)

 def something(self, letter, d):
  # do something pointless for the example
  for x in range(d):
letter = chr(ord(letter) + 1)

if __name__ == '__main__':
 WhyDoesntThisWork(). execute_something('A')

El Ruso曾指出,将某事()设为静态方法或类方法可以消除错误。遗憾的是,我的实际代码需要使用self调用其他方法。

推荐答案

尝试something

的代码

@staticmethod
def something(letter, d):
 # do something pointless for the example
 for x in range(d):
  letter = chr(ord(letter) + 1)

或重构为:

from concurrent.futures import ProcessPoolExecutor, as_completed


class WhyDoesntThisWork:
 def something(self, letter, d):
  # do something pointless for the example
  for x in range(d):
letter = chr(ord(letter) + 1)
  return letter


if __name__ == '__main__':
 executor = ProcessPoolExecutor(4)
 letter = 'A'
 obj = WhyDoesntThisWork()
 futures = [executor.submit(obj.something, letter, d) for d in range(4)]
 for future in as_completed(futures):
  print(future.result())

好了关于只能通过继承在进程之间共享获取队列对象,但我没有使用队列的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。