我对 Python 和 Django 还很陌生,所以如果有更好的方法,请告诉我。我想做的是让每个设备(继承自models.Model)启动一个长时间运行的后台线程,不断检查该设备的健康状况。但是,当我运行我的代码时,它似乎不像守护进程那样执行,因为服务器运行缓慢并且不断超时。这个后台线程将(在大多数情况下)运行程序的生命周期。
以下是我的代码的简化版本:
class Device(models.Model):
active = models.BooleanField(default=True)
is_healthy = models.BooleanField(default=True)
last_heartbeat = models.DateTimeField(null=True, blank=True)
def __init__(self, *args, **kwargs):
super(Device, self).__init__(*args, **kwargs)
# start daemon thread that polls device's health
thread = Thread(name='device_health_checker', target=self.health_checker())
thread.daemon = True
thread.start()
def health_checker(self):
while self.active:
if self.last_heartbeat is not None:
time_since_last_heartbeat = timezone.now() - self.last_heartbeat
self.is_healthy = False if time_since_last_heartbeat.total_seconds() >= 60 else True
self.save()
time.sleep(10)
这似乎是一个非常简单的线程使用,但每次我寻找解决方案时,建议的方法是使用 celery,这对我来说似乎有点过头了。有没有办法让这个工作而不需要像芹菜这样的东西?