如何在Django中异步实现回调



我正在使用Django构建一个web应用程序,它有两个部分:

  1. 部署docker容器并将到期时间存储在数据库中
  2. 然而,根据到期时间杀死它们,应用程序的用户可以选择延长容器的寿命

如何在不轮询数据库的情况下实现第二部分?

我尝试使用asyncio,并在Django中实现了一个自定义中间件,但它阻止了执行。有没有其他异步完成工作的方法。

import asyncio
from threading import Thread

def callback_func(eventloop):
"""
check DB
if now:
kill
else:
register a new callback with new updated time 
"""
# Logic to kill a container goes here
print ("Inside callback")

class KillerMiddleware:
def __init__(self, get_response):
self.get_response = get_response
self._eventloop = asyncio.new_event_loop()
asyncio.set_event_loop(self._eventloop)
self._t = Thread(target=lambda : self._eventloop.run_forever())
self._t.daemon = True
self._t.start()

def __call__(self, request):
response = self.get_response(request)
self._eventloop.call_later(86400, callback_func, self._eventloop)
return response

我真的对python-asyncio了解不多,但听起来Django Channels适合这样做。

最新更新