use*_*786 10 python granularity eventlet
我正在开发一个Web后端/ API提供程序,它从第三方Web API获取实时数据,将其放入MySQL数据库并通过HTTP/JSON API提供.
我正在使用SQLAlchemy Core为API提供烧瓶并使用DB.
对于实时数据获取部分,我有通过发送请求包装第三方API的函数,将返回的xml解析为Python dict并返回它.我们将调用这些API包装器.
然后我在其他方法中调用这些函数,这些方法获取相应的数据,在需要时进行任何处理(如时区转换等)并将其放入DB中.我们称之为处理器.
我一直在阅读异步I/O和eventlet,我印象非常深刻.
我将把它合并到我的数据抓取代码中,但我先问了一些问题:
猴子修补一切是否安全?考虑到我有烧瓶,SQLAlchemy和一堆其他的库,猴子补丁是否有任何缺点(假设没有后期绑定)?
我应该将任务划分给什么粒度?我在考虑创建一个定期生成处理器的池.然后,一旦处理器到达它调用API包装器的部分,API包装器将启动GreenPile以使用eventlet.green.urllib2获取实际的HTTP数据.这是一个好方法吗?
仅供参考,我有大约10种不同的实时数据,每隔约5-10秒就会产生一个处理器.
谢谢!
小智 3
我认为将 Flask/SQLAlchemy 与异步风格(或事件驱动)编程模型混合在一起并不明智。
但是,既然您声明您正在使用 RDBMS (MySQL) 作为中间存储,那么为什么不创建异步工作程序来将第三方 Web 服务的结果存储在 RDMBS 中,并保持前端 (Flask/SQLAlchemy) 同步?
在这种情况下,您不需要对 Flask 或 SQLAlchemy 进行 Monkeypatch。
关于粒度,您可能希望使用MapReduce范例来执行 Web API 调用和处理。此模式可能会让您了解如何在逻辑上分离连续的步骤以及如何控制所涉及的流程。
就我个人而言,我不会使用异步框架来执行此操作。使用多处理、 Celery或真正的 MapReduce 类型的系统(如Hadoop)可能会更好。
只是一个提示:从小处开始,保持简单和模块化,然后在需要更好的性能时进行优化。这也可能很大程度上受到您希望信息的实时程度的影响。
| 归档时间: |
|
| 查看次数: |
1475 次 |
| 最近记录: |