如何断开Twitter宝石与线程内部流的连接

问题描述 投票:0回答:1

我正在线程内以twitter gem运行流连接。我一直通过简单地杀死线程并打开一个新线程来断开连接。我在新旧线程之间有重叠,所以(希望)我不会错过任何内容。

但是如果我很快杀死了一些,我会从API收到Exceeded connection limit for user错误。这是因为twitter仅一次允许2个连接。似乎连接仍处于打开状态...

是否可以使用twitter gem断开连接?我想在终止线程之前断开流,所以我知道有多少打开。

我的代码看起来像这样:

thred = Thread.new do
  client = ::Twitter::Streaming::Client.new(..config..)
  client.filter(follow: '1,2,44') do |tweet|
    // do stuff
  end
end

而且我像这样杀死他们:

thred.kill

但是我想运行类似的东西:

client.disconnect

然后整理死线程或其他东西...

ruby multithreading twitter streaming twitter-gem
1个回答
0
投票

感谢@ tin-nguyen将我定向到文档。

我的解决方案是这样的:

thredbo = lambda do |client, str|
  Thread.current.thread_variable_set(:client, client)

  follows = '1,2,3,4' # twitter ids. This is where I query the DB for accounts.

  client.filter(follow: follows) do |tweet|
    puts [str, 'client response'].join(' ')
  end

  puts [str, 'connection closed'].join(' ')
end

config = {} # your credentials

main = Thread.new(
  ::Twitter::Streaming::Client.new(config),
  'main',
  &thredbo
)

# close
main.thread_variable_get(:client).close

关闭连接后,线程完成。


推荐问答