我有一个Django应用,需要生成可能需要一分钟的文件,因此我将其传递给后台工作人员。
当前,该过程如下。我发布到服务器,该服务器回复可以轮询的URL。然后,我每2秒轮询一次服务器,然后发回“忙”或该文件在我的S3存储桶中的位置的URL。
我想将此轮询替换为Django渠道,但由于无法在网上找到任何示例,因此不确定实现此目的的最佳方法是什么。频道甚至还打算用于这样的事情吗?
我目前的想法如下:
下面是一个示例:
@shared_task
def my_bg_task(channel_name):
#some long running calc here
channel_layer = get_channel_layer()
async_to_sync(channel_layer.send)(channel_name, {'type': 'generation_done', 'f_path': 'path/to/s3/bucket'})
class ReloadConsumer(WebsocketConsumer):
def connect(self):
my_bg_task.delay(self.channel_name)
self.accept()
def generation_done(self, event):
self.send(text_data=json.dumps({event}))
这是实现这一目标的最佳方法吗?
很显然,从安全角度出发,打开连接的用户以外的任何人都不能访问它。