我有网络物联网系统。我需要后台异步任务来收集物联网设备数据,然后将其存储到数据库。task.py作业在循环运行时收集数据,而不会停止。更新task.py时,我将停止所有正在运行的任务并重新启动celery。但是我有20台或更多的设备,所以我有20项正在运行的任务,这不是一个好的解决方案。有什么好主意吗?谢谢。
这是task.py,我有一个可以动态运行任务的网络GUI。
@app.task(bind=True, base=AbortableTask, max_retries=None)
def getDeviceValue(self, deviceName):
data = getDeviceData(deviceName)
insertData(data)
return deviceName
这是在网络gui上启动的view.py处理任务。
class DeviceTaskStart(View):
def get(self, request, deviceName, *args, **kwargs):
taskData, isCreate = TaskData.objects.get_or_create(name=deviceName)
if isCreate:
taskId = getDeviceValue.delay(deviceName)
taskData.taskId = taskId
taskData.save()
else:
state = app.AsyncResult(taskData.taskId).state
print(state)
return redirect(reverse(self.pattern_name))