Отключите TwythonStreamer при УДАЛЕНИИ вызова остальных API
Вот моя обертка на TwythonStreamer:
from twython import TwythonStreamer
class Twitter_talker(TwythonStreamer):
def __init__(self):
super(Twitter_talker, self).__init__(<my credentials here...>)
def on_success(self, data):
self.disconnect()
print data
def on_error(self, status_code, data):
print status_code
self.disconnect()
Вот мой призыв получить статусы из твиттера:
class Tweet_Handler(tornado.web.RequestHandler):
def get(self):
stream = Twitter_talker()
stream.statuses.filter(track='badminton')
Я создаю этот поток в поисках "бадминтона" при вызове GET REST API на мой веб-сервер. И хотя он не закодирован, но это будет асинхронный вызов, то есть я верну ответ типа "1", указывающий, что поток был успешно создан.
Как я self.disconnect
когда я получаю вызов DELETE REST API со значением "бадминтон"?
2 ответа
Ваш DELETE
У обработчика будет другой self
чем ваш GET
обработчик (новый RequestHandler
всегда создается для каждого запроса. Вам нужно будет хранить GET
где-то обработчик, возможно, глобальный словарь, сопоставляющий ключевые слова с набором обработчиков (не забудьте удалить его в on_finish
). Посмотрите демонстрацию чата Торнадо и как она управляет множеством официантов.
Используйте атрибут класса для хранения словаря Twitter Talkers.
class Tweet_Handler(tornado.web.RequestHandler):
requests = {}
def get(self):
stream = Twitter_talker()
stream.statuses.filter(track='badminton')
Tweet_Handler.requests['badminton'] = stream
def delete(self):
value = self.get_argument("value")
if value in Tweet_Handler.requests:
Tweet_Handler.requests[value].disconnect()
del Tweet_Handler.requests[value]