Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 线程中出现异常:线程目标接受的参数多于给定的参数_Python_Multithreading_Python Multithreading - Fatal编程技术网

Python 线程中出现异常:线程目标接受的参数多于给定的参数

Python 线程中出现异常:线程目标接受的参数多于给定的参数,python,multithreading,python-multithreading,Python,Multithreading,Python Multithreading,我正在尝试对_消息回调并行运行一些测试。当调用我的on_消息回调时,基于某个消息,我创建一个线程来运行某个测试,并将其设置为守护进程线程。我只将一个参数传递给线程中指定的目标方法。即使我只传递一个参数,我也会得到这个错误 TypeError:mymethod()接受2个位置参数,但给出了10个 args=(param)并不像人们想象的那样创建元组。元组由,s生成,而不是由()s生成 您可以使用args=(param,)或仅使用args=param,创建一个单元素元组(后者在函数调用中不起作用,并

我正在尝试对_消息回调并行运行一些测试。当调用我的on_消息回调时,基于某个消息,我创建一个线程来运行某个测试,并将其设置为守护进程线程。我只将一个参数传递给线程中指定的目标方法。即使我只传递一个参数,我也会得到这个错误

TypeError:mymethod()接受2个位置参数,但给出了10个

args=(param)
并不像人们想象的那样创建元组。元组由
s生成,而不是由
()
s生成


您可以使用
args=(param,)
或仅使用
args=param,
创建一个单元素元组(后者在函数调用中不起作用,并且会影响可读性,因此请避免使用它)。

由于传递给参数“args”的值的格式,因此存在错误

args参数接受tuple,因此应使用以下代码:

t = Thread(target = test.mymethod, args=(param,))
其中重要的部分是param后面的逗号,这意味着您需要传递一个序列

解释

>>> (2)
2
>>> (2,)
(2,)

用括号括起来与直接传递相同。这在多行情况下特别有用。例如对导入进行分组

因此:

在您的情况下,您希望传递参数,如中所示,多个。要创建一个
元组
,后面的逗号很重要

所以在你的例子中,你需要逗号;)


您是否尝试过将args作为
args=(param,)
传递?
mymethod()
的代码在哪里?为了确保每个python开发者的理智,请不要使用
params,
语法来创建元组。我同意Pjot的观点,在函数调用中这似乎是一个特别糟糕的主意,绑定强度可能会扰乱您的一天:
func(*params,)!=func(*(params,)
修复了语法,很抱歉:)
>>> (2)
2
>>> (2,)
(2,)
a = (3)
b = 3
a == 3
t = Thread(target = test.mymethod, args=(param)) # param object being passed as args. Guess this has 10 items.
t = Thread(target = test.mymethod, args=(param, )) # passing a tuple with param as first and only item. So passing one args.