我使用Python的线程模块编写了一个小的python脚本用于多线程。
threading.Thread
调用的目标函数有2个参数(self
和另一个值)。但是我总是收到以下错误TypeError: example() takes 2 positional arguments but 3 were given
即使只给出两个参数。
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
任何帮助将不胜感激!
答案 0 :(得分:2)
args
必须是列表或元组,但是()
不能创建元组。您必须使用逗号来创建具有单个值的元组-args=(a,)
threading.Thread(target=cl.example, args=(t,)).start()
()
在这里仅用于分隔逗号,该逗号从函数中创建参数的逗号创建元组。您可以在没有()
的情况下执行相同的操作,但是必须在线程之前创建元组
arguments = a,
threading.Thread(target=cl.example, args=arguments).start()
答案 1 :(得分:1)
好吧,刚找到我的问题,再次查看了文档,发现了以下内容:
threading.Thread(target=cl.example args=[t]).start()
使用[]作为参数可以解决问题...