Ten IncompleteRead
błąd zwykle pojawia się, gdy zużycie przychodzących tweetów zaczyna spadać
, co ma sens w Twoim przypadku, biorąc pod uwagę długą listę haseł do śledzenia. Ogólnym podejściem, które wydaje się przyjmować większość ludzi (w tym ja), jest po prostu pominięcie tego błędu i kontynuowanie kolekcji (patrz link powyżej).
Nie pamiętam do końca, czy IncompleteRead
zamknie Twoje połączenie (myślę, że może, ponieważ moje osobiste rozwiązanie ponownie łączy mój strumień), ale możesz rozważyć coś takiego (po prostu to zrobię, prawdopodobnie wymaga to przeróbki w Twojej sytuacji ):
# from httplib import IncompleteRead # Python 2
from http.client import IncompleteRead # Python 3
...
while True:
try:
# Connect/reconnect the stream
stream = Stream(auth, listener)
# DON'T run this approach async or you'll just create a ton of streams!
stream.filter(terms)
except IncompleteRead:
# Oh well, reconnect and keep trucking
continue
except KeyboardInterrupt:
# Or however you want to exit this loop
stream.disconnect()
break
...
Ponownie, po prostu to robię, ale morał z tej historii jest taki, że ogólne podejście przyjęte tutaj polega na stłumieniu błędu i kontynuowaniu.
EDYTUJ (10.11.2016): Po prostu przydatna ciekawostka dla każdego, kto ma do czynienia z bardzo dużą liczbą tweetów – jeden ze sposobów na poradzenie sobie z tą sprawą bez utrata czasu połączenia lub tweetów oznaczałaby upuszczenie przychodzących tweetów do rozwiązania kolejkowania (RabbitMQ, Kafka itp.) w celu ich przetworzenia/przetworzenia przez aplikację czytającą z ta kolejka.
To przenosi wąskie gardło z interfejsu API Twittera do kolejki, co nie powinno mieć problemu z oczekiwaniem na wykorzystanie danych.
Jest to bardziej oprogramowanie „produkcyjne”, więc jeśli nie zależy Ci na utracie tweetów lub ponownym połączeniu, powyższe rozwiązanie jest nadal całkowicie ważne.