- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在开发一个 Web 后端/API 提供程序,它从第 3 方 Web API 获取实时数据,将其放入 MySQL 数据库并通过 HTTP/JSON API 提供。
我正在使用 flask 提供 API,并使用 SQLAlchemy Core 处理数据库。
对于实时数据抓取部分,我有通过发送请求、将返回的 xml 解析为 Python dict 并返回它来包装第 3 方 API 的函数。我们将调用这些 API 包装器。
然后我在其他获取相应数据的方法中调用这些函数,根据需要进行任何处理(如时区转换等)并将其放入数据库中。我们将调用这些处理器。
我一直在专门阅读有关异步 I/O 和 eventlet 的内容,给我留下了深刻的印象。
我将把它合并到我的数据抓取代码中,但我首先有一些问题:
猴子修补所有东西对我来说安全吗?考虑到我有 flask 、SQLAlchemy 和一堆其他的库,猴子修补有什么缺点吗(假设没有后期绑定(bind))?
我应该将任务划分到什么粒度?我正在考虑创建一个定期生成处理器的池。然后,一旦处理器到达它调用 API 包装器的部分,API 包装器将启动一个 GreenPile 以使用 eventlet.green.urllib2 获取实际的 HTTP 数据。这是一个好方法吗?
仅供引用,我有大约 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/
我有 2 个事实表,每个表都有一个度量组,生产和生产订单。生产具有较低粒度的生产信息(在组件级别)生产订单具有较高级别的信息(具有抬头数量等的订单级别)。 我在 productionorderid 的
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 9年前关闭。 Improve this q
我第一次尝试了解 Akka/Actors,并且对每个 Actor 职责的粒度有点困惑。 在我的应用程序中,有可以使用 WidgetRegistrar 注册/取消注册的 Widget。要向 Regist
我们一直在使用 MVP 模式和 Winforms,并取得了相当大的成功。然而,关于 MVP 总是弹出一个问题: 对于演示者来说,什么是好的粒度? 我的意思是:对于 Winforms,细粒度通常适用于用
我通常使用 git add -p 添加更改,而且很多时候有几个代码块的大块头,由空行分隔。 但是,git 不会进一步拆分 大块头,我不得不求助于手动编辑。 如何增加 hunk 的粒度,以便每个代码块都
例如,我看到 dumps.wikimedia.org/other/pagecounts-raw/,但那里没有特定国家/地区的数据... 最佳答案 据我所知,没有。出于明显的隐私原因,发布的页面查看统计
JavaScript 的源映射似乎通常不比 token 粒度更精细。 例如,identity-map uses token granularity . 我知道我看过其他例子,但不记得在哪里。 为什么我
我有这些目录: ./Tools ./ook/Tools. 我在 setup.cfg 中的 py.test 的 norecursedirs 选项中添加了 Tools。正如预期的那样,当 py.test
我正在使用这个 Accelerometer graph来自 Apple 并尝试转换他们的 G-force 代码以计算 +/- 128。 下图显示标签中的 x、y、z 值与图表上的输出不匹配:(请注意,
此问题围绕 Android 应用程序的架构展开。 在使用 LifeCycle 组件 ViewModel 时,最好是每个 fragment 一个 ViewModel 还是订阅 fragment 的父 A
我是一名优秀的程序员,十分优秀!