如何正确关闭tweepy流

Wil*_*lco 15 python multithreading tweepy

我正在试图找出如何正确关闭异步tweepy流.

可以在这里找到tweepy流模块.

我像这样开始流:

stream = Stream(auth, listener)
stream.filter(track=['keyword'], async=True)
Run Code Online (Sandbox Code Playgroud)

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

stream.disconnect()
Run Code Online (Sandbox Code Playgroud)

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

我有两个问题:

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

Voo*_*OFX 0

这是设计使然。查看源代码,您会注意到断开连接没有立即终止选项。

def disconnect(self):
    if self.running is False:
        return
    self.running = False
Run Code Online (Sandbox Code Playgroud)

当调用disconnect()时,它只是设置self.running = False,然后在_run方法的下一个循环中检查它

您可以忽略这个副作用。