Python Django芹菜和通道示例
我有一个Django应用程序,需要生成最多需要一分钟的文件,所以我将其传递给后台工作人员 目前,流程如下所示。我发布到服务器,该服务器使用我可以轮询的URL进行回复。然后,我每2秒轮询一次服务器,并返回“busy”或文件在我的S3存储桶中的位置的url 我想用Django频道取代这种轮询,但不确定实现这一点的最佳方式是什么,因为我在网上找不到任何示例。这些频道是不是专门为这样的东西设计的 我目前的想法如下:Python Django芹菜和通道示例,python,django,amazon-s3,celery,django-channels,Python,Django,Amazon S3,Celery,Django Channels,我有一个Django应用程序,需要生成最多需要一分钟的文件,所以我将其传递给后台工作人员 目前,流程如下所示。我发布到服务器,该服务器使用我可以轮询的URL进行回复。然后,我每2秒轮询一次服务器,并返回“busy”或文件在我的S3存储桶中的位置的url 我想用Django频道取代这种轮询,但不确定实现这一点的最佳方式是什么,因为我在网上找不到任何示例。这些频道是不是专门为这样的东西设计的 我目前的想法如下: 一旦客户端在特定路由上打开与的连接,就开始生成文件(以前这是post) 客户端连接并获取
@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}))
这是实现这一目标的最佳方式吗?
显然,从安全的角度来看,除了打开连接的用户之外,任何人都不应该访问它。您能分享整个代码吗?这将是我的救命稻草。谢谢