继承 threading.Thread class 不起作用

Inheritance threading.Thread class does not work

我是多线程方面的新手,所以答案可能很简单。

我正在尝试使一个 class 和 运行 的两个实例并行。我读过我可以使用 class 继承来做到这一点。

class hello(threading.Thread):
    def __init__(self,min,max):
        threading.Thread.__init__(self)
        time.sleep(max)

        for i in range(1000):
            print random.choice(range(min,max))

h = hello(3,5)
k = hello(0,3)

我注意到这不起作用(第一个输出是 3 到 5 之间的数字)

你能解释一下我做错了什么吗?
这份遗产是专门用来做别的事情的吗?

编辑:我想 运行 这两个对象并行,所以由于第二个对象的等待时间更短,它必须更快地打印这些数字。

根据 porglezomps 的评论,我尝试更改代码 - 添加一个打印这些数字但按顺序打印的方法。问题依旧。

threading 的文档说您应该覆盖 run() 方法,然后使用 start() 方法开始在新线程上执行。在您的情况下,您的代码应该是:

class Hello(threading.Thread):
    def __init__(self, min, max):
        self.min, self.max = min, max
        threading.Thread.__init__(self)

    def run(self):
        time.sleep(self.max)

        for i in range(1000):
            print random.choice(range(self.min, self.max))

# This creates the thread objects, but they don't do anything yet
h = Hello(3,5)
k = Hello(0,3)

# This causes each thread to do its work
h.start()
k.start()

Python 线程的常规实现已经知道如何 运行 任务,所以除非你正在创建一种特殊类型的线程(不是一种特殊类型的任务) - 什么您可能想要使用常规线程:

def task(_min, _max): # 'min' and 'max' are actual functions!
    time.sleep(_max)
    for _ in range(1000):
        print random.choice(range(_min,_max))

现在为 运行 任务创建一个线程:

t1 = threading.Thread(target=task, args=(3, 5,))
t2 = threading.Thread(target=task, args=(3, 5,))

t1.start()
t2.start()