【发布时间】:2022-10-25 15:19:05
【问题描述】:
在我的 django 项目中,我使用 TemplateView 类创建了一个视图类。同样,我正在使用 django 频道并且也创建了一个消费者类。现在,每当用户刷新页面时,我都在尝试使用 celery worker 来提取查询集数据。但问题是,如果用户在任务完成之前再次刷新页面,它会创建另一个导致过载的任务。
因此,我使用 revoke 来终止之前正在运行的任务。但我明白了,撤销永久撤销了任务 ID。我不知道如何清除这个。因为,每当用户调用它时,我想再次运行该任务。
视图.py
class Analytics(LoginRequiredMixin,TemplateView):
template_name = 'app/analytics.html'
login_url = '/user/login/'
def get_context_data(self, **kwargs):
app.control.terminate(task_id=self.request.user.username+'_analytics')
print(app.control.inspect().revoked())
context = super().get_context_data(**kwargs)
context['sub_title'] = 'Analytics'
return context
消费者.py
class AppConsumer(AsyncJsonWebsocketConsumer):
async def connect(self):
await self.accept()
analytics_queryset_for_selected_devices.apply_async(
args=[self.scope['user'].username],
task_id=self.scope['user'].username+'_analytics'
)
【问题讨论】:
标签: django django-views celery django-celery django-channels