Toto IncompleteRead
k chybě obvykle dochází, když vaše spotřeba příchozích tweetů začne zaostávat
, což ve vašem případě dává smysl vzhledem k vašemu dlouhému seznamu výrazů ke sledování. Zdá se, že obecný přístup, který většina lidí používá (včetně mě), je jednoduše potlačit tuto chybu a pokračovat ve sběru (viz odkaz výše).
Nemohu si úplně vzpomenout, zda IncompleteRead
uzavře vaše připojení (myslím, že by mohlo, protože moje osobní řešení znovu připojí můj stream), ale můžete zvážit něco jako následující (Já to jen přejdu, pravděpodobně to potřebuje přepracovat pro vaši situaci ):
# 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
...
Znovu, jen to tam plácám, ale morálka příběhu je taková, že obecný přístup, který se zde používá, je potlačit chybu a pokračovat.
UPRAVIT (10. 11. 2016): Užitečná drobnost pro každého, kdo se zabývá velmi velkým objemem tweetů – jeden ze způsobů, jak tento případ zvládnout bez ztráta času připojení nebo tweety by znamenalo přesunout vaše příchozí tweety do frontového řešení (RabbitMQ, Kafka atd.), aby je zpracovala/zpracovala aplikace, která čte z ta fronta.
To přesune úzké hrdlo z Twitter API do vaší fronty, kde by neměl být problém čekat, až spotřebujete data.
Jedná se spíše o „produkční“ softwarové řešení, takže pokud vám nezáleží na ztrátě tweetů nebo opětovném připojení, výše uvedené řešení je stále dokonale platné.