2012-03-05 20 views
7

Tôi muốn chia sẻ các thông tin nhỏ giữa các nút công nhân của tôi (ví dụ như thẻ ủy quyền được lưu trữ, thống kê, ...) trong cần tây.Chia sẻ các khu vực bộ nhớ giữa các công nhân cần tây trên một máy

Nếu tôi tạo một tệp toàn cục bên trong tệp nhiệm vụ của mình thì nó là duy nhất cho mỗi công nhân (Công nhân của tôi là các quá trình và có thời gian hoạt động là 1 nhiệm vụ/thực thi).

Phương pháp hay nhất là gì? Tôi có nên lưu trạng thái bên ngoài (DB), tạo một bộ nhớ chia sẻ lỗi thời (có thể khó khăn vì các cài đặt nhóm khác nhau trong cần tây)?

Cảm ơn trước!

+1

Điều gì về bộ nhớ cache như memcached hoặc các cửa hàng có giá trị khóa như Redis? – demalexx

+0

Đó sẽ là một cách, nhưng tôi hy vọng rằng tôi có thể tìm thấy một cách mà không có sự phụ thuộc bổ sung. – Gregor

+0

Đó là sự phụ thuộc rất nhỏ nhưng nó sẽ giải quyết một số vấn đề mà bạn có thể gặp phải khi thực hiện giao tiếp liên thông riêng. – demalexx

Trả lời

7

cuối cùng tôi đã tìm thấy một phong nha giải pháp - lõi python đa-Manager:

from multiprocessing import Manager 
manag = Manager() 
serviceLock = manag.Lock() 
serviceStatusDict = manag.dict() 

dict này có thể được truy cập từ tất cả các quá trình, nó đồng bộ, nhưng bạn phải sử dụng một khóa khi truy cập vào nó đồng thời (như trong mọi bộ nhớ được chia sẻ khác).

+0

Xin chào Gregor, tôi rất vui khi có ý kiến ​​của bạn về vấn đề này tôi đang gặp phải: http://stackoverflow.com/questions/26088868/asynchronous-task-queue-processing-of-in-memory-data- stucture-in-django Bạn có nghĩ giải pháp của bạn phù hợp với vấn đề của tôi không? Cảm ơn rất nhiều – cyberjoac

+0

Hi cyberjoac, nói chung điều này có thể hiệu quả, nhưng bạn cần phải thử xem Django và Celery có sống trong cùng một nhóm quy trình (mà tôi nghi ngờ) không. Hãy cho tôi biết nếu nó hoạt động, tôi quan tâm! – Gregor

+1

Bạn bắt đầu Trình quản lý này ở đâu? –