Tôi đang làm việc trên một nhà cung cấp phụ trợ/API web lấy dữ liệu thời gian thực từ API của bên thứ ba, đặt nó trong cơ sở dữ liệu MySQL và cung cấp nó trên API HTTP/JSON.Eventlet/chung async I/O nhiệm vụ chi tiết
Tôi đang cung cấp API với bình và làm việc với DB bằng SQLAlchemy Core.
Đối với phần lấy dữ liệu thời gian thực, tôi có các hàm bao bọc API của bên thứ ba bằng cách gửi một yêu cầu, phân tích cú pháp xml được trả về thành dict Python và trả về nó. Chúng tôi sẽ gọi các trình bao bọc API này.
Sau đó tôi gọi các hàm này trong các phương thức khác lấy dữ liệu tương ứng, thực hiện bất kỳ xử lý nào nếu cần (như chuyển đổi múi giờ, v.v.) và đặt trong DB. Chúng tôi sẽ gọi những bộ vi xử lý này.
Tôi đã đọc về I/O và eventlet không đồng bộ một cách cụ thể và tôi rất ấn tượng.
tôi sẽ kết hợp nó trong dữ liệu của tôi lấy mã, nhưng tôi có một số câu hỏi đầu tiên:
là nó an toàn cho tôi để khỉ vá tất cả mọi thứ? xem xét tôi có bình, SQLAlchemy và một loạt các libs khác, có bất kỳ nhược điểm để khỉ vá (giả sử không có ràng buộc muộn)?
Tính chi tiết tôi nên chia nhiệm vụ của mình là gì? Tôi đã nghĩ đến việc tạo ra một hồ bơi định kỳ sinh ra các bộ vi xử lý. Sau đó, khi bộ xử lý đạt đến phần mà nó gọi trình bao bọc API, trình bao bọc API sẽ bắt đầu một GreenPile để nhận dữ liệu HTTP thực tế bằng eventlet.green.urllib2. Đây có phải là một cách tiếp cận tốt?
- Hết thời gian chờ - Tôi muốn đảm bảo không có phần greenthread nào bị treo. Nó là một cách tiếp cận tốt để thiết lập eventlet.Timeout 10-15 giây cho mỗi greenthread?
FYI, tôi có khoảng 10 bộ dữ liệu thời gian thực khác nhau và bộ xử lý được sinh ra sau mỗi 5-10 giây.
Cảm ơn!
cảm ơn nhận xét của bạn. Tôi đồng ý liên quan đến việc không trộn Flask và Async I/O - nó không được rõ ràng từ câu hỏi của tôi, nhưng API (Flask) chạy trên một quá trình I/O không đồng bộ, không được vá riêng biệt. Trình thu thập dữ liệu chạy trên một quá trình được vá, ghi vào db bằng cách sử dụng SQLAlchemy Core (không phải ORM) chỉ nhằm mục đích đơn giản hóa. – user1094786
OK, trong trường hợp đó bạn đã thực hiện nó theo cách này. Tôi tự hỏi, mặc dù nếu bạn thực sự cần async cho grabber dữ liệu. Bạn có thể được tốt hơn với các phương pháp khác của đồng thời (đa xử lý, Celery, vv), đặc biệt là nếu grabber dữ liệu của bạn là CPU chuyên sâu. –
+1 cho cần tây. Nhiệm vụ trông giống như một ứng cử viên tốt cho nó. – Tisho