5

Tôi bắt đầu phác họa cấu trúc trang web dịch vụ thông tin tài chính định lượng được viết bằng Python (3.x Tôi hy vọng) và đã đi đến kết luận - sửa cho tôi nếu tôi ' m sai - rằng tôi sẽ phải sử dụng cả thư viện mạng sự kiện thư viện đa xử lý. Một phần của hệ thống về cơ bản là một công việc cron chạy nền, kiểm tra thị trường chứng khoán và các dữ liệu tài chính khác sau khi đóng cửa thị trường, học máy và tính toán lượng tử, sau đó đặt các dự đoán trong một cơ sở dữ liệu đơn giản hoặc thậm chí là một tệp phân tách bằng dấu phẩy phẳng. (Các đối số được chuyển qua lại giữa các phần của hệ thống qua tập tin.)câu hỏi đa xử lý và đa xử lý cho trang web số

Tôi hiểu rằng có thể sử dụng eventlet cho I/O nonblocking để súp đẹp hoặc có thể cạo thông tin từ nhiều trang cùng một lúc (loại) và thư viện đa xử lý có thể cho phép thuật toán học/toán học của máy tính thực hiện các phép tính trên tất cả các dữ liệu chứng khoán song song như các quá trình riêng biệt.

Để xem dự đoán, người dùng sẽ đăng nhập vào phần khác của hệ thống được xây dựng bằng Flask sẽ truy cập vào cơ sở dữ liệu và hiển thị các dự đoán.

Tôi cho rằng tất cả các thư viện và chủ đề hỗn hợp/thủ tục đa xử lý này có được cùng với nhau không? Tôi sẽ sử dụng pythonanywhere.com làm máy chủ, và chúng dường như có khá ít "pin đi kèm". Tất nhiên, khi thử nghiệm kết thúc, tôi có lẽ sẽ phải nâng cấp số lượng "công nhân" để cấp nguồn cho trang web được triển khai cuối cùng.

Bất kỳ cạm bẫy nào trong việc trộn luồng và xử lý nhiều thứ phức tạp như vậy?

+0

không thể trả lời câu hỏi của bạn một cách thuyết phục như tôi đã không cố gắng mà chính xác nhưng nhìn chung nó là tốt để có nhiều chủ đề và nhiều quy trình. – 101

+0

Tôi không biết chắc chắn * gevent * liên quan đến * eventlet * như thế nào, nhưng để hỗ trợ đa xử lý từ * gevent * khi chủ đề được vá khỉ, tôi phải sử dụng mô đun * subprocess * để liên lạc và * pickle * cho serialization vì đa xử lý không được hỗ trợ bởi * gevent *. – cpburnz

+0

PythonAnywhere dev here. Một trong những điều bạn cần phải biết khi thực hiện điều này trên PythonAnywhere là chúng ta giới hạn các luồng và các tiến trình mà người dùng có thể bắt đầu, vì vậy bạn có thể cần phải sử dụng một hồ bơi thread/process. Tôi tin rằng đa xử lý đã được xây dựng trong. – Glenn

Trả lời

2

Chỉ cần một vài suy nghĩ chung rằng không thể phù hợp vào phần nhận xét:

  1. scrapy đã có một số cách để xử lý yêu cầu concurrent mạng qua xoắn. Điều này có nghĩa là bạn có thể không cần sử dụng eventlet? Tất nhiên, điều này phụ thuộc vào cách chính xác bạn đang làm cạo/chính xác những gì bạn cần để cạo. Từ những gì tôi đã thử một thời gian dài trước đây (có lẽ tôi hoàn toàn sai), nếu bạn nói selen cần thiết để loại bỏ các câu trả lời javascript, thì thật khó để làm điều này đồng thời với các mẩu tin lưu niệm. Nhưng nếu bạn chỉ nhận được yêu cầu với urllib hoặc một cái gì đó (ví dụ: để API), sau đó tôi nghĩ rằng chỉ cần cào là đủ.

  2. Tôi đồng ý với nhận xét của bạn - phần cào web luôn dễ bị lỗi, vì vậy bạn chắc chắn muốn tách phần cào với các phần dự đoán. Bạn cần tính đến các lỗi không thành công (ví dụ: nếu trang web bị lỗi hoặc nếu bạn đang nhận dữ liệu sai), và dọn sạch tất cả dữ liệu trước khi nhồi dữ liệu đã được làm sạch vào cơ sở dữ liệu của riêng bạn, và sau đó (chạy riêng) công cụ học máy trên dữ liệu đó.

Nhưng một điều quan trọng ở đây là bạn chắc chắn cần một cơ sở dữ liệu giữa cào và học máy (không thể vượt qua chúng trong bộ nhớ hoặc qua csv như bạn đã đề xuất). lý do vô số, một cặp vợ chồng là:

  • tiết kiệm trên vết xước của bạn (sẽ không cần phải tải về nhiều ngày dữ liệu mọi lúc, chỉ ngày gần đây nhất)
  • cung cấp cho bạn sao lưu và dữ liệu lịch sử trong trường hợp web của bạn mẩu tin lưu niệm không có sẵn nữa (ví dụ: giả sử bạn đang cạo trong 365 ngày qua - nếu nguồn thông tin của bạn chỉ cung cấp cho bạn 365 ngày qua nhưng bạn đột nhiên muốn 700 ngày?Bạn muốn lưu dữ liệu từ các mẩu tin lưu niệm trước đó của bạn ở đâu đó)
  • nhanh hơn/tốt hơn/ít flakey hơn - có chỉ số db được lập chỉ mục chính xác có thể sẽ quan trọng nếu không quan trọng hơn bất kỳ loại xử lý song song nào của máy học của bạn thuật toán.

Cũng btw django công trình really well với scrapy ...