Ora*_*Tux 13 python multithreading
想象一下以下课程:
Class Object(threading.Thread):
# some initialisation blabla
def run(self):
while True:
# do something
sleep(1)
class Checker():
def check_if_thread_is_alive(self):
o = Object()
o.start()
while True:
if not o.is_alive():
o.start()
Run Code Online (Sandbox Code Playgroud)
我想重新启动线程,以防它死了.这不起作用.因为线程只能启动一次.第一个问题.为什么是这样?
据我所知,我必须重新创建每个实例Object并调用start()再次启动线程.在复杂Object的情况下,这不是很实用.我要读取旧的当前值Object,创建一个新值并使用旧值在新对象中设置参数.第二个问题:这可以通过更智能,更简单的方式完成吗?
Ell*_*ioh 17
threadading.Thread实现的原因是保持线程对象和操作系统的线程之间的对应关系.在主要操作系统中,线程无法重新启动,但您可以使用另一个线程ID创建另一个线程.
如果娱乐是一个问题,则无需从threading.Thread继承您的类,只需将目标参数传递给Thread的构造函数,如下所示:
class MyObj(object):
def __init__(self):
self.thread = threading.Thread(target=self.run)
def run(self):
...
Run Code Online (Sandbox Code Playgroud)
然后,您可以访问线程成员来控制线程执行,并根据需要重新创建它.不需要MyObj娱乐.