我有一个 python 脚本,它读取有关特定体育赛事的所有推文并将其输入数据库。当我这个周末运行它时,每次游戏中发生重大事件时脚本都会停止并且我会收到错误。它说它与代码有关,但我不相信情况是这样。我在 Twitter 的 api 网站上找到了这个:
“落后了”
无法足够快地处理消息的客户端将被断开连接。跟踪您的客户是否落后的一种方法是将您收到的推文的时间戳与当前时间进行比较。如果时间戳之间的差异随着时间的推移而增加,则客户端处理推文的速度不如推文传送的速度。接收客户端落后通知的另一种方法是在建立流连接时传递stall_warnings参数。”
我想知道这是否发生在我身上,以及实现解决方案的最佳方法是什么。
最佳答案
由于 straming API 创建永久连接,落后
从技术上讲意味着将推文放入此连接的速度比客户端使用的速度要快。
解决方案很简单,您必须更快地处理推文,即优化您的景观。一定存在瓶颈,识别它们并妥善处理。例如,可能是数据库延迟(当您的数据库每秒无法处理足够的插入时)、IO 延迟(当数据无法按需要快速存储到磁盘时);代码效率低下; CPU负载高;网络带宽限制等。
没有适用于所有情况的 Elixir ,但一些明显的步骤包括:
- 按原样存储从 Twitter 收到的数据,并在负载较低的窗口中进行后处理;
- 部署具有多个推文消费者(处理器)和数据分片的集群;
- 使用更快的磁盘/一些 raid 配置可以加速 IO;
- 推文查询优化,确保请求和处理尽可能少的推文;
- 代码优化;
- 迁移到带宽更高的数据中心;
关于python - Tweepy 流 API 落后了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19960086/