Отключите 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]
Другие вопросы по тегам