首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将队列字典传递给multiprocessing.Process

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

Stack Overflow用户
提问于 2015-11-24 13:22:18
回答 2查看 2.2K关注 0票数 2

我不确定是否可以将队列字典作为参数传递给进程。如果这只可能是作为权杖,如何才能做到呢?

代码语言:javascript
复制
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()

错误是:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-24 14:05:24

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

代码语言:javascript
复制
args=(words_manager['my_dict'])

大括号不会被解释为元组,所以您不会将参数序列传递给args。相反,您应该通过将,放在末尾显式地创建一个1元素元组:

代码语言:javascript
复制
args=(words_manager['my_dict'],)

来自Python文档

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

票数 1
EN

Stack Overflow用户

发布于 2015-11-24 13:55:49

如果在元素后面使用逗号,则它将正确运行。

args=(words_manager['my_dict'],)

我支持没有逗号的Python将字典中的每个值解释为参数,而用逗号将其视为元组,而words_manager‘’my_dict‘作为唯一的参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33894841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档