继承 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()
我是多线程方面的新手,所以答案可能很简单。
我正在尝试使一个 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()