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

80

我想在创建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"处遇到了语法错误。 我想知道如何将关键字参数传递给目标函数。


2
你有阅读文档吗? - jonrsharpe
2
你不需要指定参数的名称,可以使用普通元组:t = threading.Thread(target=f, args=(1,2,)) - bonh
3个回答

136
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'})

3
请考虑编辑您的帖子,增加关于您的代码能够解决问题的原因和解释。如果答案主要只包含代码(即使它是有效的),通常不会帮助提问者理解他们的问题。 - SuperBiasedMan
我对vladosaurus的回答没有任何问题。更长并不总是更有帮助;简明扼要才是关键。在这种情况下,它在几秒钟内就解决了我的问题,真是救了我的一天。 - Jerry Hu

16
您也可以直接将字典传递给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()

0
尝试用kwargs={x: 1, y: 2}替换args

7
当然不是,你想表达的是{'x': 1, 'y': 2},这是一个很大的差别。 - glglgl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接