Deze IncompleteRead
fout treedt meestal op wanneer uw verbruik van inkomende tweets achterop begint te raken
, wat in uw geval logisch is gezien uw lange lijst met te volgen termen. De algemene benadering die de meeste mensen lijken te volgen (inclusief ikzelf) is om deze fout te onderdrukken en door te gaan met verzamelen (zie de link hierboven).
Ik kan me niet helemaal herinneren of IncompleteRead
zal je verbinding verbreken (ik denk van wel, omdat mijn persoonlijke oplossing mijn stream opnieuw verbindt), maar je zou iets als het volgende kunnen overwegen (Ik ga er gewoon mee aan de slag, het moet waarschijnlijk worden aangepast voor jouw situatie ):
# 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
...
Nogmaals, ik ben er gewoon mee bezig, maar de moraal van het verhaal is dat de algemene benadering die hier wordt gevolgd is om de fout te onderdrukken en door te gaan.
BEWERKEN (10/11/2016): Gewoon een handig stukje voor iedereen die te maken heeft met zeer grote hoeveelheden tweets - een manier om deze zaak zonder aan te pakken het verliezen van verbindingstijd of tweets zou zijn om uw inkomende tweets in een wachtrij-oplossing (RabbitMQ, Kafka, enz.) te laten vallen om te worden opgenomen/verwerkt door een toepassing die van leest die wachtrij.
Dit verplaatst het knelpunt van de Twitter API naar uw wachtrij, wat geen probleem zou moeten zijn om te wachten tot u de gegevens verbruikt.
Dit is meer een "productie" software-oplossing, dus als je er niet om geeft tweets te verliezen of opnieuw verbinding te maken, is de bovenstaande oplossing nog steeds perfect geldig.