我怎样才能结合烧瓶和滑子?

How can i combine flask and nameko?

如何将 Flask Web 应用程序与 Nameko 微服务相结合?

让我给你一些背景信息。我有基于烧瓶的 (http://flask.pocoo.org) Web 应用程序。此应用程序可以执行长时间(5-10 分钟)的任务。我希望能够在该应用程序仍然 运行 时编写附加模块并将其附加到该应用程序。如果我在开发中停止应用程序是可以的,但我不能在生产中停止它。

我没有任何使用 Nameko 的经验 (https://nameko.readthedocs.org),它是解决我问题的最佳方法吗?如果是的话——我可以混合使用 Flask 应用程序和 Nameko 微服务吗?

你听说过Pinball吗?它是 Pinterest 自己的工作流程管理器。

它允许您安排和管理跨多台机器扩展的作业,它位于 Python。

他们宣扬以下设计原则:

  • 简单:基于易于掌握的抽象
  • 可扩展:基于组件的方法
  • 透明:状态以可读格式存储
  • 可靠:无状态计算组件
  • 可扩展:水平扩展
  • 管理员友好:无需中止工作流程即可升级
  • 功能丰富:自动重试、每个作业的电子邮件、运行时交替、优先级、超限策略等

这里是 nameko 的贡献者。我同意 nathancahill 的观点,芹菜是一个不错的选择。

您绝对可以同时使用 nameko 和 Flask。这里有一个要点中的简短示例:https://gist.github.com/mattbennett/4250ce5d56b36a99bc39

尽管如此,在该配置中,您覆盖了 Celery 的构建目标——即在请求-响应周期之外处理长 运行 任务。坦率地说,要点中的示例最好作为 nameko 应用程序(使用内置的 http 入口点)单独实现,因为它没有使用 Flask 为您提供的任何更高级的类似 web 框架的功能。

如果您想编写微服务,即使是主要基于 HTTP 的微服务,nameko 也提供了一些不错的工具。如果你只是想为现有的 webapp 添加异步处理,celery 将是标准选择。

在网关导入烧瓶

from flask import Flask
app = Flask(__name__)

示例:

import json
from nameko.rpc import RpcProxy
from nameko.web.handlers import http
from flask import Flask, render_template, request, redirect, url_for

app = Flask(__name__)

问题是为什么要把flask和nameko结合起来?它们都是 API 构建框架(它们都有 http 请求处理端点)。

在我们的项目中,我们从 Flask 开始。在我们进入微服务的短时间内,我们将 flask 和 nameko 结合在一个微服务中,但这种组合带来的问题多于收益。

我的提示:您应该将 flask 和 nameko 视为 API 提供者。如果你需要 nameko 来做微服务,我建议转储 flask。主要问题是 flask 有哪些 nameko 无法提供的功能?也许你可以通过第一方代码或其他(比烧瓶更容易结合)库来实现它。