量子站点的多线程和多处理问题

时间:2015-02-13 21:07:57

标签: python flask python-multithreading python-multiprocessing pythonanywhere

我开始勾勒出用Python编写的量化金融信息服务网站的结构(3.x我希望)并得出结论 - 纠正我,如果我错了 - 我我将不得不同时使用eventlet网络库多处理库。

该系统的一部分基本上是一个在后台运行的cron作业,在市场关闭后检查股票市场和其他财务数据,进行机器学习和定量计算,然后将预测放在一个简单的数据库中,甚至可能是一个平面逗号分隔文件。 (因此,参数通过文件在系统各部分之间传递。)

据我所知,eventlet可以用于非阻塞I / O,这样美丽的汤或scrapy可以同时从多个站点(多种类型)抓取信息,多处理库可以启用机器学习/量化算法将所有库存数据的计算并行计算为单独的流程。

要查看预测,用户将登录使用Flask构建的系统的其他部分,该部分将访问数据库并显示预测。

我认为所有这些库和混合线程/多处理例程相互配合?我将使用pythonanywhere.com作为主机,它们似乎有相当多的“电池包括在内”。当然,当测试完成后,我可能不得不升级“工作人员”的数量来为最终部署的站点供电。

混合线程和多处理中的任何陷阱都很复杂吗?

1 个答案:

答案 0 :(得分:2)

只是一些不适合评论部分的一般性想法:

  1. scrapy已经有一些方法可以通过twisted处理concurrent网络请求。这意味着您可能不需要使用eventlet?当然,这取决于你是如何准确地进行刮擦/你需要刮刮的。从我很久以前尝试过的(也许我完全错了),如果你说需要硒来消除javascript响应,那么scrapy同时很难做到这一点。但是,如果您只是使用urllib或其他东西(例如:API)获取请求,那么我认为只需scrapy即可。

  2. 我同意你的评论 - 网络抓取部分总是非常容易失败,所以你肯定想要将抓取部分与预测部分分开。您需要考虑失败的擦除(例如:如果网站关闭会怎么样,或者如果您收到错误的数据怎么办),并在将清理后的数据填充到您自己的数据库之前清理所有数据,然后(单独)运行机器在那些数据上学习东西。

  3. 但是这里有一个重要的事情是你绝对需要在抓取和机器学习之间建立一个数据库(不能像你建议的那样在内存中或通过csv传递它们)。无数的原因,一对夫妇:

    • 保存您的信息(不需要每次都下载多天的数据,只是最近一天)
    • 为您提供备份和历史数据,以防万一您的网页搜索不再可用(例如:说您在最近365天刮了一次 - 如果您的信息来源仅提供过去365天,但您突然想要700天?您希望保存先前刮擦的数据)
    • 更快/更好/更少flakey-如果没有比机器学习算法的任何并行处理更重要的话,拥有正确索引的数据库可能同样重要。

    另外btw django使用scrapy工作really well ......