Python 如何将队列字典传递给multiprocessing.Process

Python 如何将队列字典传递给multiprocessing.Process,python,python-multiprocessing,Python,Python Multiprocessing,我不确定是否可以将队列字典作为参数传递给进程。如果这只可能作为夸尔格,那怎么做呢 from multiprocessing import Process, Queue class WordsManager: def __init__(self, my_dict): self.dict = my_dict def run(self): pass def words_worker(my_dict): worker = WordsMa

我不确定是否可以将队列字典作为参数传递给进程。如果这只可能作为夸尔格,那怎么做呢

from multiprocessing import Process, Queue


class WordsManager:

    def __init__(self, my_dict):
        self.dict = my_dict

    def run(self):
        pass


def words_worker(my_dict):
    worker = WordsManager(my_dict)
    worker.run()


def start_job_manager():
    my_dict = {}
    for language in ('en', 'de', 'es'):
        my_dict[language] = Queue()

    words_manager = {'process': None, 'my_dict': my_dict}
    words_manager["process"] = Process(target=words_worker, args=(words_manager['my_dict']))
    words_manager["process"].daemon = True
    words_manager["process"].start()

    return words_manager


start_job_manager()
错误是:

Process Process-4:
Traceback (most recent call last):
   File "/home/antonio/python/lib/python3.4/multiprocessing/process.py", line 254, in _bootstrap
self.run()
  File "/home/antonio/python/lib/python3.4/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
TypeError: words_worker() takes 1 positional argument but 3 were given

如果在元素后使用逗号,它将正常运行

args=(words\u manager['my\u dict',)


我支持在不使用逗号的情况下,Python将字典中的每个值解释为一个参数,但在使用逗号时,它将被视为一个元组,并将单词_manager['my_dict']作为唯一参数

问题在于传递给流程的参数:

args=(words_manager['my_dict'])
大括号不被解释为元组,因此您没有将一系列参数传递给
args
。相反,您应该通过在末尾放置
来显式创建一个1元素元组:

args=(words_manager['my_dict'],)
从:

一个特殊的问题是包含0或1项的元组的构造:语法有一些额外的怪癖来适应这些。空元组由一对空括号构成;带有一个项的元组是通过在值后面加逗号来构造的(仅将单个值括在括号中是不够的)。丑陋,但有效