1

我使用 Python 的多线程模块编写了一个小的 Python 脚本。
被调用的目标函数threading.Thread接受 2 个参数(self和另一个值)。TypeError: example() takes 2 positional arguments but 3 were given 但即使只给出了 2 个参数,我总是会收到以下错误。

import threading
import random
num=random.randint(1,999)

threadN=10 #number of processes
a="11" #testing value
class ExampleClass():
    def __init__(self):
        self.num=num

    def example(self,a):
        print(self.num)
        print(a)

if __name__ == '__main__':
    cl=ExampleClass()
    while threadN>0:

        threading.Thread(target=cl.example, args=(a)).start()
        threadN-=1

任何帮助,将不胜感激!

4

2 回答 2

3

args必须是列表或元组,但()不创建元组。您必须使用逗号创建具有单个值的元组 -args=(a,)

 threading.Thread(target=cl.example, args=(t,)).start()

()这里只是为了将创建元组的逗号与分隔函数中的参数的逗号分开。你可以不做同样的事情,()但你必须在线程之前创建元组

 arguments = a,
 threading.Thread(target=cl.example, args=arguments).start()
于 2019-08-20T08:44:36.900 回答
2

好的,刚刚发现我的问题,再次查看文档并发现以下内容:

threading.Thread(target=cl.example args=[t]).start() 使用 [ ] 作为参数可以解决问题......

于 2019-08-20T08:26:19.573 回答