quant站点的多线程和多处理问题



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

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

我知道eventlet可以用于非阻塞I/O,这样漂亮的汤或scrapy就可以同时(某种程度上)从许多网站上抓取信息,多处理库可以使机器学习/量化算法能够作为单独的过程并行计算所有库存数据。

为了查看预测,用户将登录到使用Flask构建的系统的另一部分,该部分将访问数据库并显示预测。

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

在如此复杂的事情中混合线程和多处理有什么陷阱吗?

只是一些无法放入评论部分的一般想法:

  1. scrapy已经有了一些通过twisted处理并发网络请求的方法。这意味着您可能不需要使用eventlet?当然,这取决于你到底是如何刮的/你到底需要刮什么。从我很久以前的尝试来看(也许我完全错了),如果你说需要硒来抓取javascript响应,那么很难将其与scratch同时进行。但是,如果你只是用urlib或其他东西(例如:到API)来获取请求,那么我认为只要有scratch就足够了。

  2. 我同意你的评论——网络抓取部分总是很容易失败,所以你肯定想把抓取和预测部分分开。你需要考虑失败的抓取(例如:如果网站关闭怎么办,或者如果你得到了错误的数据怎么办),在将清理后的数据放入你自己的数据库之前清理所有数据,然后(单独)对这些数据运行机器学习。

但这里有一件重要的事情是,你肯定需要一个介于抓取和机器学习之间的数据库(不能像你建议的那样只在内存中或通过csv传递它们)。无数的原因,有几个是:

  • 节省开支(不需要每次下载多天的数据,只需要最近一天)
  • 给你备份和历史数据,以防你的网络抓取不再可用(例如:说你正在抓取最后365天-如果你的信息源只给你最后365天,但你突然想要700天怎么办?你想把以前抓取的数据保存在某个地方)
  • 要快得多/更好/不那么脆弱-拥有一个正确索引的数据库可能与机器学习算法的任何并行处理一样重要,甚至更重要

此外,顺便说一句,django与scrapy合作得很好。。。

最新更新