【发布时间】:2022-03-08 04:02:05
【问题描述】:
我正在开发一个 twitter 机器人,以根据某些关键字流式传输推文并转发到 Telegram。关键字存储在 Excel 文件中,可由用户更改。我目前的做法是:
- 使用修改后的 on_status 方法实例化子类 tweepy.Stream 对象。
- 在 main 中启动 3 个线程:
-
线程 1 检查 excel 文件中关键字的变化并相应地更新 keyword_queue。
-
线程 2 运行此函数以流式传输推文:
def stream_tweets(keywords_queue, stream): while True: search_keywords = keywords_queue.get() print("Search keywords for filter: {}".format(search_keywords)) if search_keywords: stream.filter(track=search_keywords) -
线程 3 运行例程将推文转发到电报。
-
问题出在 stream_tweets 函数中。根据 tweepy 的实现,一旦 stream.filter 被调用,线程执行就会停在那里,直到连接由于任何原因关闭。这不符合我的要求,因为我需要能够修改传递给 stream.filter (search_keywords) 中的 track 参数的参数。但由于线程停止,search_keywords 列表并没有根据线程 1 提供的数据进行更新。
一种可能的解决方法是每次线程 1 注意到关键字文件发生更改时断开流,然后重新连接。但是频繁断开会导致错误。我想到的另一个解决方案是使用 on_status 方法再次过滤推文,然后再将它们传递给电报线程 3,但这违背了 stream.filter() 的目的
有什么推荐的方法吗?这是我第二次使用线程,所以请善待。
干杯:)
【问题讨论】:
标签: python multithreading tweepy