将关键字参数传递给 Python threading.Thread 中的目标函数

Posted

技术标签:

【中文标题】将关键字参数传递给 Python threading.Thread 中的目标函数【英文标题】:Pass keyword arguments to target function in Python threading.Thread 【发布时间】:2015-09-03 23:08:53 【问题描述】:

我想在创建 Thread 对象时将命名参数传递给目标函数。

以下是我写的代码:

import threading

def f(x=None, y=None):
    print x,y

t = threading.Thread(target=f, args=(x=1,y=2,))
t.start()

我在第 6 行收到“x=1”的语法错误。 我想知道如何将关键字参数传递给目标函数。

【问题讨论】:

你读过the documentation吗? 你不需要使用指定参数的名字,你可以使用一个普通的元组:t = threading.Thread(target=f, args=(1,2,)) 【参考方案1】:

您也可以直接将字典传递给 kwargs:

import threading

def f(x=None, y=None):
    print x,y

my_dict = 'x':1, 'y':2
t = threading.Thread(target=f, kwargs=my_dict)
t.start()

【讨论】:

【参考方案2】:
t = threading.Thread(target=f, kwargs='x': 1,'y': 2)

这将传递一个字典,其中关键字参数的名称作为键,参数值作为字典中的值。 上面的另一个答案不起作用,因为“x”和“y”在该范围内未定义。

另一个例子,这次是多处理,同时传递位置和关键字参数:

使用的函数是:

def f(x, y, kw1=10, kw2='1'):
    pass

然后在使用多处理调用时:

p = multiprocessing.Process(target=f, args=('a1', 2,), kwargs='kw1': 1, 'kw2': '2')

【讨论】:

请考虑编辑您的帖子,以添加更多关于您的代码的作用以及它为何能解决问题的说明。一个大部分只包含代码的答案(即使它正在工作)通常不会帮助 OP 理解他们的问题。 我对 vladosaurus 的回答没有任何问题。更长的时间并不总是更有帮助。言简意赅。在这种情况下,它可以在几秒钟内节省我的时间。【参考方案3】:

尝试将args 替换为kwargs=x: 1, y: 2

【讨论】:

当然不是。 ITYM 'x': 1, 'y': 2,这是一个巨大的差异。

以上是关于将关键字参数传递给 Python threading.Thread 中的目标函数的主要内容,如果未能解决你的问题,请参考以下文章

如何将关键字参数作为参数传递给函数?

如何将关键字对作为参数传递给函数中的模块?

是否可以将关键字参数传递给 Django % url % 模板标签?关键字参数值应该来自 html 标签

如何将字典传递给带有关键字参数的函数?

dajaxice:将参数传递给 python 函数

Python最小化函数:将附加参数传递给约束字典