为什么在重新启动线程时需要重新创建实例?

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娱乐.