Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正在更新芹菜任务已完成的客户端_Python_Flask_Celery - Fatal编程技术网

Python 正在更新芹菜任务已完成的客户端

Python 正在更新芹菜任务已完成的客户端,python,flask,celery,Python,Flask,Celery,我有以下要求。我正在创建一个web应用程序(没有前端),它将接收post和get请求。它的功能如下所示。客户端将在一个URL上发布一篇帖子,从而触发一项耗时的大型任务。客户机还可以发出Get请求并检索taks的结果 我想用芹菜来开始这项工作。这个任务是一个非常大的算术运算。我的问题是如何通知客户他触发的任务已经完成,并且他可以检索结果 所以我是这样想的: client ->posts to web app -> web app starts task to celery ->

我有以下要求。我正在创建一个web应用程序(没有前端),它将接收post和get请求。它的功能如下所示。客户端将在一个URL上发布一篇帖子,从而触发一项耗时的大型任务。客户机还可以发出Get请求并检索taks的结果

我想用芹菜来开始这项工作。这个任务是一个非常大的算术运算。我的问题是如何通知客户他触发的任务已经完成,并且他可以检索结果

所以我是这样想的:

client ->posts to web app -> web app starts task to celery -> request closed

web app notifies -> client triggered task  # what is the proper way

client -> get request to web app -> web app returns result
我知道没有一个合适的方法,所以我会更具体一点。目前,任务将由另一个flask应用程序自动触发。是否有一种方法可以自动通知flask应用程序任务已完成,并获取结果并将其存储在自己的数据库中?第二个问题是,即使客户端是flask应用程序、android应用程序和IOS应用程序等,最通用的解决方案是什么


我问这个问题的原因也是因为我曾就api是否将结果发回客户机或客户机是否应该负责检查并获取结果进行过辩论。

我过去也曾做出过类似的决定,即客户机需要在完成长时间运行的芹菜任务后进行更新。有许多不同的方法可以设计系统来解决此问题:

  • 带轮询的状态端点-这是最简单的解决方案。在flask中公开一个端点,该端点返回作业的状态,并且只需从客户端进行轮询。然而,有几件事需要注意,即客户端的数量和轮询的频率。如果您有太多的客户端或轮询过于频繁,则可能会遇到性能问题。如果您有一些客户端,并且不需要即时状态更新,这是理想的
  • WebSocket-在客户端和flask服务器之间打开一个WebSocket,并在任务完成时使用它推送更新。这种方法可以更好地扩展到多个客户端,并允许近乎即时的通知
  • 回调URL-您提到客户端是一个Flask应用程序。您可以在客户机服务器上公开回调路由,并在启动任务时将其提供给芹菜。任务完成后,芹菜可以发布到回调URL,这将通知客户端
  • 至于最通用的解决方案,要么是status endpoint,要么是WebSocket——Android和iOS内置了HTTP功能,可以使用库处理WebSocket。另一方面,回调URL解决方案特定于Flask