多线程问题与多线程处理

2024-05-13 18:40:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我知道eventlet可以用于非阻塞I/O,这样beautiful soup或scrapy可以同时从多个站点从web上获取信息(某种程度上),并且多处理库可以使机器学习/数量算法能够作为单独的进程并行地对所有股票数据进行计算。在

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

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

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


Tags: 文件网络机器数据库数量站点网站系统
1条回答
网友
1楼 · 发布于 2024-05-13 18:40:32

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

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

  2. 我同意你的意见-网页抓取部分总是很容易失败,所以你一定要把抓取和预测分开。你需要考虑失败的抓取(例如:如果网站关闭了怎么办,或者如果你得到了错误的数据怎么办),在把清理后的数据塞进你自己的数据库之前,先清理所有的数据,然后(单独)在这些数据上运行机器学习工具。

但这里有一点很重要,那就是你肯定需要一个介于抓取和机器学习之间的数据库(不能像你建议的那样,把它们放在内存中或者通过csv传递)。不计其数的原因是:

  • 节省时间(无需每次下载多天的数据,只需下载最近一天的数据)
  • 给你备份和历史数据,以防你的网络抓取不再可用(例如:假设你正在抓取过去365天——如果你的信息来源只给你最后365天,但你突然想要700天呢?你想把以前的数据保存在某个地方)
  • 更快/更好/更少的碎片-拥有一个正确索引的数据库可能与机器学习算法的任何并行处理同等重要。在

顺便说一句,django和scrapy一起工作。。。在

相关问题 更多 >