Ce IncompleteRead
l'erreur a généralement tendance à se produire lorsque votre consommation de tweets entrants commence à prendre du retard
, ce qui est logique dans votre cas compte tenu de votre longue liste de termes à suivre. L'approche générale que la plupart des gens semblent adopter (moi y compris) est simplement de supprimer cette erreur et de continuer votre collecte (voir le lien ci-dessus).
Je ne me souviens pas complètement si IncompleteRead
fermera votre connexion (je pense que c'est possible, car ma solution personnelle reconnecte mon flux), mais vous pouvez envisager quelque chose comme ce qui suit (Je vais juste le faire, il a probablement besoin d'être retravaillé pour votre situation ):
# 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
...
Encore une fois, je ne fais que m'envoler, mais la morale de l'histoire est que l'approche générale adoptée ici consiste à supprimer l'erreur et à continuer.
MODIFICATION (10/11/2016) : Juste une friandise utile pour tous ceux qui traitent de très gros volumes de tweets - une façon de gérer ce cas sans perdre du temps de connexion ou des tweets reviendrait à déposer vos tweets entrants dans une solution de mise en file d'attente (RabbitMQ, Kafka, etc.) pour être ingérés/traités par une application lisant de cette file d'attente.
Cela déplace le goulot d'étranglement de l'API Twitter vers votre file d'attente, qui ne devrait avoir aucun problème à attendre que vous utilisiez les données.
Il s'agit plutôt d'une solution logicielle de "production", donc si vous ne vous souciez pas de perdre des tweets ou de vous reconnecter, la solution ci-dessus est toujours parfaitement valable.