IncompleteRead
này thường có xu hướng xảy ra lỗi khi lượng tweet đến của bạn bắt đầu tụt hậu
, điều này có ý nghĩa trong trường hợp của bạn với danh sách dài các thuật ngữ cần theo dõi. Phương pháp chung mà hầu hết mọi người dường như đang thực hiện (bao gồm cả tôi) chỉ đơn giản là loại bỏ lỗi này và tiếp tục thu thập của bạn (xem liên kết ở trên).
Tôi không thể nhớ hoàn toàn nếu IncompleteRead
sẽ đóng kết nối của bạn (tôi nghĩ điều đó có thể xảy ra, vì giải pháp cá nhân của tôi kết nối lại luồng của tôi), nhưng bạn có thể xem xét điều gì đó như sau ( Tôi chỉ sắp sửa nó, nó có thể cần làm lại cho tình huống của bạn ):
# 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
...
Một lần nữa, tôi chỉ sắp xếp nó ở đó, nhưng đạo lý của câu chuyện là cách tiếp cận chung được thực hiện ở đây là loại bỏ lỗi và tiếp tục.
CHỈNH SỬA (10/11/2016): Chỉ là một mẹo nhỏ hữu ích cho bất kỳ ai xử lý khối lượng tweet rất lớn - một cách để xử lý trường hợp này mà không mất thời gian kết nối hoặc tweet sẽ là thả các tweet đến của bạn vào giải pháp xếp hàng (RabbitMQ, Kafka, v.v.) để được nhập / xử lý bởi ứng dụng đọc từ hàng đợi đó.
Điều này sẽ di chuyển nút cổ chai từ API Twitter đến hàng đợi của bạn, điều này sẽ không có vấn đề gì khi bạn phải chờ đợi để sử dụng dữ liệu.
Đây là giải pháp phần mềm "sản xuất" nhiều hơn, vì vậy nếu bạn không quan tâm đến việc mất tweet hoặc kết nối lại, giải pháp trên vẫn hoàn toàn hợp lệ.