Python线程-多线程崩溃

时间:2019-08-20 08:21:03

标签: python multithreading python-multithreading

我使用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

任何帮助将不胜感激!

2 个答案:

答案 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() 使用[]作为参数可以解决问题...