将关键字参数传递给 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 中的目标函数的主要内容,如果未能解决你的问题,请参考以下文章