【发布时间】:2018-04-13 16:45:16
【问题描述】:
我正在使用 Flask 和 python(版本 3.6)构建一个小型实用程序。
这个实用程序基本上是使用 REST 调用来调用外部系统(sys1 和 sys2),并将数据从 sys1 单向同步到 sys2。 此同步过程将持续运行,直到设置终止标志。
我希望能够使用烧瓶路由启动和停止此同步过程/方法。
例如,
- 如果在 /start 收到请求,
o 然后启动再启动这个方法。
o 返回一个 HTTP 响应代码(响应不应等待方法完成) - 如果在 /stop 收到请求, o 如果方法正在运行,则通过设置 kill 标志停止该方法。 (同样,flask 的响应不应等待方法完成)
现在,我浏览了这里和其他网站的许多查询,但它们似乎都满足特定需求。根据我的理解,我尝试了以下事情(可能无法正确完成此任务:
-
尝试从路由创建线程并调用该方法 - 由于某种原因,flask 等待该方法完成而无法正常工作(是因为 flask 是单线程且阻塞的吗?)
阅读 celery,但我觉得在这种情况下使用 celery 可能有点矫枉过正。
异步启动此过程的正确方法是什么以及如何?线程? asyncio 或 Celery 是唯一的方法。
【问题讨论】:
-
你可能需要设置flask才能使用线程,看看here。另一种选择可能是使用进程互操作,您可以使用 python 的子进程模块启动子进程并捕获信号以终止进程。
标签: python-3.x flask celery python-multithreading