我不确定是否可以将队列字典作为参数传递给进程。如果这只可能是作为权杖,如何才能做到呢?
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发布于 2015-11-24 14:05:24
问题在于传递给进程的参数:
args=(words_manager['my_dict'])大括号不会被解释为元组,所以您不会将参数序列传递给args。相反,您应该通过将,放在末尾显式地创建一个1元素元组:
args=(words_manager['my_dict'],)来自Python文档
一个特殊的问题是包含0或1项的元组的构造:语法有一些额外的怪癖来容纳这些项。空元组由空对括号构成;带有一个项的元组是通过在值后面加上逗号来构造的(将单个值括在括号中是不够的)。丑陋但有效。
发布于 2015-11-24 13:55:49
如果在元素后面使用逗号,则它将正确运行。
args=(words_manager['my_dict'],)
我支持没有逗号的Python将字典中的每个值解释为参数,而用逗号将其视为元组,而words_manager‘’my_dict‘作为唯一的参数。
https://stackoverflow.com/questions/33894841
复制相似问题