Това IncompleteRead
грешка обикновено възниква, когато потреблението ви на входящи туитове започне да изостава
, което има смисъл във вашия случай предвид дългия ви списък от термини за проследяване. Общият подход, който повечето хора изглежда предприемат (включително и аз) е просто да потискат тази грешка и да продължат събирането ви (вижте връзката по-горе).
Не мога да си спомня напълно дали IncompleteRead
ще затвори връзката ви (мисля, че може, защото моето лично решение свързва отново моя поток), но може да помислите за нещо като следното (Просто ще го откажа, вероятно има нужда от преработване за вашата ситуация ):
# 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
...
Отново, аз просто го разкривам, но моралът на историята е, че общият подход, възприет тук, е да се потисне грешката и да се продължи.
РЕДАКТИРАНЕ (10/11/2016): Просто полезна хапка за всеки, който се занимава с много големи обеми туитове - един начин да се справите с този случай без загубата на време за връзка или туитове би означавала да пуснете входящите си туитове в решение за опашка (RabbitMQ, Kafka и т.н.), за да бъдат погълнати/обработени от приложение, което чете от тази опашка.
Това премества пречка от приложния програмен интерфейс (API) на Twitter към вашата опашка, която не би трябвало да има проблем да чака да консумирате данните.
Това е по-скоро софтуерно решение за „производство“, така че ако не ви е грижа за загубата на туитове или повторното свързване, горното решение все още е напълно валидно.