2015-06-02 16 views
7

Tôi có một ứng dụng python mà sử dụng một từ điển như một bộ nhớ chia sẻ giữa nhiều quá trình:Gunicorn chia sẻ bộ nhớ giữa các quá trình đa và công nhân

from multiprocessing import Manager 
manager = Manager() 
shared_dict = manager.dict() 

REST API được thực hiện sử dụng Flask. Trong khi sử dụng pywsgi hoặc đơn giản Flask.run để khởi tạo máy chủ Flask, mọi thứ đều hoạt động tốt. Tôi quyết định ném vào gunicorn hỗn hợp. Bây giờ, khi tôi truy cập dict này được chia sẻ từ bất kỳ người lao động (ngay cả khi chỉ có một đang chạy) tôi nhận được lỗi:

message = connection.recv_bytes(256) # reject large message
IOError: [Errno 35] Resource temporarily unavailable

Tôi đã được nhìn vào mmap, đa Listener và khách hàng và tất cả họ trông giống như một rất nhiều chi phí.

Trả lời

0

Tôi không biết về lỗi cụ thể, nhưng tôi nghĩ nguyên nhân có thể xảy ra nhất là khi bạn thêm máy chủ web, quy trình được khởi tạo theo yêu cầu, do đó manager_dict bị mất trong cuộc gọi. Nếu dict không đủ lớn và bạn có thể trả tiền cho việc xê-ri hóa/hủy tuần tự hóa, sử dụng kho lưu trữ cấu trúc dữ liệu trong bộ nhớ redis với thư viện py-redis khá đơn giản.

Các vấn đề liên quan