【问题标题】:how to properly close a tweepy stream如何正确关闭 tweepy 流
【发布时间】:2012-12-15 16:53:06
【问题描述】:

我正在尝试弄清楚如何正确关闭异步 tweepy 流。

tweepy流媒体模块可以在here找到。

我这样开始直播:

stream = Stream(auth, listener)
stream.filter(track=['keyword'], async=True)

关闭应用程序时,我尝试关闭流,如下所示:

stream.disconnect()

此方法似乎按预期工作,但似乎有一个问题: 流线程仍然处于循环中间(等待/处理推文)并且直到下一个循环才会被杀死,因此即使在应用程序关闭后流接收到推文时,它仍然会尝试调用侦听器对象(这可以通过侦听器对象上的简单打印语法看到)。我不确定这是否是一件坏事,或者是否可以简单地忽略它。

我有两个问题:

  1. 这是关闭流的最佳方法还是我应该采取其他方法?
  2. 不应该将异步线程创建为守护线程吗?

【问题讨论】:

  • 为什么不改用 Twython?它是来自 Twitter 的 Python 官方库。

标签: python multithreading tweepy


【解决方案1】:

我遇到了同样的问题。我通过重新启动脚本来修复它。 Tweepy Stream 直到下一条传入推文才会停止。

例子:

import sys
import os

python=sys.executable

time.sleep(10)

print "restart"
os.execl(python,python,*sys.argv)

我没有找到其他解决方案。

【讨论】:

    【解决方案2】:

    我不确定它是否适用于您的情况,但一般来说,您可以通过将适用的实体放在 with 块中来自行清理它们:

    with stream = Stream(auth, listener):
        stream.filter(track=['keyword'], async=True)
        # ...
    # Outside the with-block; stream is automatically disposed of.
    

    “处置”实际上意味着,实体__exit__ 函数被调用。
    大概 tweepy 会覆盖它来做正确的事情。
    正如@VooDooNOFX 建议的那样,您可以检查来源以确定。

    【讨论】:

      【解决方案3】:

      这是设计使然。 Looking at the source,您会注意到断开连接没有立即终止选项。

      def disconnect(self):
          if self.running is False:
              return
          self.running = False
      

      当调用disconnect()时,它简单地设置self.running = False,然后在_run method的下一个循环中检查它

      你可以忽略这个副作用。

      【讨论】:

        【解决方案4】:

        我没有像@burkay 建议的那样重新启动脚本,而是最终删除了 Stream 对象并启动了一个新对象。在我的例子中,有人想添加一个新用户来关注,所以我用这种方式更新了跟踪列表:

        stream.disconnect() # that should wait until next tweet, so let's delete it
        del stream
        # now, create a new object
        stream = tweepy.Stream( auth=api.auth, listener=listener )
        stream.userstream( track=all_users(), async=True )
        

        【讨论】:

          猜你喜欢
          • 2017-03-29
          • 2021-06-26
          • 2021-07-28
          • 1970-01-01
          • 2021-09-08
          • 2017-04-30
          • 1970-01-01
          • 1970-01-01
          • 2012-06-27
          相关资源
          最近更新 更多