Как отключить Twitter Gem от потоковой передачи внутри темы - PullRequest
0 голосов
/ 25 марта 2020

У меня потоковое соединение с twitter gem внутри потока. Я отключился, просто убив тему и открыв новую. У меня есть пересечение между старыми и новыми потоками, поэтому я ничего не пропускаю (надеюсь).

Но если я убью несколько быстро, я получу ошибку Exceeded connection limit for user от API. Это потому, что твиттер допускает только 2 подключения одновременно. Кажется, что соединение все еще открыто ...

Есть ли способ отключиться с помощью твиттера? Я хочу отключить потоки перед тем, как убить поток, чтобы я знал, сколько их открыто.

Мой код выглядит примерно так:

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

А затем привести в порядок мертвые темы или что-то в этом роде ...

1 Ответ

0 голосов
/ 26 марта 2020

Спасибо @ 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

После того, как соединение закрыто, поток завершен.

...