为什么在重新启动线程时需要重新创建实例?
想象一下以下课程:
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()
我想重新启动线程以防万一。这不起作用。因为线程只能启动一次。第一个问题。为什么是这样?
据我所知,我必须重新创建的每个实例Object
并调用start()
以再次启动线程。如果是Object
s,这不是很实际。我必须读取旧值的当前值Object
,创建一个新值,并使用旧值在新对象中设置参数。第二个问题:这可以用更聪明,更轻松的方式完成吗?
-
之所以以这种方式实现threading.Thread,是为了保持线程对象与操作系统线程之间的对应关系。在主要的操作系统中,无法重新启动线程,但是您可以
使用另一个线程id 创建另一个线程。如果重新创建是一个问题,则无需从threading.Thread继承类,只需将目标参数传递给Thread的构造函数,如下所示:
class MyObj(object): def __init__(self): self.thread = threading.Thread(target=self.run) def run(self): ...
然后,您可以访问线程成员以控制线程执行,并根据需要重新创建它。不需要MyObj娱乐。
-
Kubernetes pod 在删除时重新创建
2022-07-28 关注 0 浏览8 1答案
-
Django 1.7迁移不会重新创建删除的表,为什么?
2021-01-29 关注 0 浏览73 1答案
-
为什么NetBeans在部署时会重新创建“旧”软件包的文件夹?
2021-02-01 关注 0 浏览129 1答案
-
为什么更改jsp时tomcat不需要重新启动
2021-02-01 关注 0 浏览92 1答案
-
Android SQLite-为什么每次都要重新创建我的数据库?
2021-05-10 关注 0 浏览74 1答案
-
从 IEnumerable 重新创建字典>
2022-07-28 关注 0 浏览17 1答案
-
JSF 2.0:为什么即使仍在同一View上也要重新创建ViewScope Bean
2021-01-30 关注 0 浏览77 1答案
-
“防止保存需要重新创建表的更改”负面影响
2022-05-26 关注 0 浏览10 1答案
-
阻止TabControl重新创建其子级
2021-02-02 关注 0 浏览103 1答案
-
Java Spring重新创建特定的Bean
2021-01-30 关注 0 浏览129 1答案