gpt4 book ai didi

python - Eventlet/通用异步 I/O 任务粒度

转载 作者:太空狗 更新时间:2023-10-29 19:28:44 24 4
gpt4 key购买 nike

我正在开发一个 Web 后端/API 提供程序,它从第 3 方 Web API 获取实时数据,将其放入 MySQL 数据库并通过 HTTP/JSON API 提供。

我正在使用 flask 提供 API,并使用 SQLAlchemy Core 处理数据库。

对于实时数据抓取部分,我有通过发送请求、将返回的 xml 解析为 Python dict 并返回它来包装第 3 方 API 的函数。我们将调用这些 API 包装器。

然后我在其他获取相应数据的方法中调用这些函数,根据需要进行任何处理(如时区转换等)并将其放入数据库中。我们将调用这些处理器。

我一直在专门阅读有关异步 I/O 和 eventlet 的内容,给我留下了深刻的印象。

我将把它合并到我的数据抓取代码中,但我首先有一些问题:

  1. 猴子修补所有东西对我来说安全吗?考虑到我有 flask 、SQLAlchemy 和一堆其他的库,猴子修补有什么缺点吗(假设没有后期绑定(bind))?

  2. 我应该将任务划分到什么粒度?我正在考虑创建一个定期生成处理器的池。然后,一旦处理器到达它调用 API 包装器的部分,API 包装器将启动一个 GreenPile 以使用 eventlet.green.urllib2 获取实际的 HTTP 数据。这是一个好方法吗?

  3. 超时 - 我想确保没有任何 greenthreads 挂起。将每个 greenthread 的 eventlet.Timeout 设置为 10-15 秒是一种好方法吗?

仅供引用,我有大约 10 组不同的实时数据,并且每大约 5-10 秒生成一个处理器。

谢谢!

最佳答案

我认为将 Flask/SQLAlchemy 与异步样式(或事件驱动)编程模型混合使用并不明智。

但是,既然您声明您正在使用 RDBMS (MySQL) 作为中间存储,那么您为什么不创建异步工作程序来将来自第三方 Web 服务的结果存储在 RDMBS 中,并保留您的前端(Flask/SQLAlchemy)同步?

在这种情况下,您不需要对 Flask 或 SQLAlchemy 进行 monkeypatch。

关于粒度,您可能希望使用 mapreduce执行 Web API 调用和处理的范例。此模式可能会让您了解如何在逻辑上分隔连续的步骤,以及如何控制所涉及的流程。

但就个人而言,我不会使用异步框架来执行此操作。使用多处理可能会更好,Celery ,或像 Hadoop 这样的真正的 mapreduce 系统.

只是一个提示:从小处着手,保持简单和模块化,如果您需要更好的性能,稍后再进行优化。这也可能在很大程度上受到您希望信息的实时性的影响。

关于python - Eventlet/通用异步 I/O 任务粒度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10760959/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com