2012-03-05 16 views
7

Chcę udostępniać małe fragmenty informacji między moimi węzłami roboczymi (na przykład buforowane tokeny autoryzacji, statystyki, ...) w selerze.Udostępnianie obszarów pamięci między pracownikami selera na jednym komputerze

Jeśli utworzę plik globalny w moim pliku zadań, będzie on unikatowy dla każdego pracownika (Moi pracownicy są procesami i mają czas życia 1 zadania/wykonania).

Jaka jest najlepsza praktyka? Czy powinienem zapisać stan zewnętrzny (DB), utworzyć starą pamięć współdzieloną (może być trudny ze względu na różne implementacje puli w selerze)?

Z góry dzięki!

+1

Co z pamięcią podręczną, taką jak memcached, lub sklepami z kluczowymi wartościami, takimi jak Redis? – demalexx

+0

To byłby sposób, ale miałem nadzieję, że znajdę drogę bez dodatkowej zależności. – Gregor

+0

To maleńka zależność, ale rozwiąże ona niektóre problemy, które możesz napotkać, implementując własną komunikację między procesami. – demalexx

Odpowiedz

7

I wreszcie znalazł godnego rozwiązania - rdzenia Pythona Multiprocessing-Manager:

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

Ten DICT można uzyskać z każdego procesu, to zsynchronizowane, ale trzeba użyć blokady, gdy dostęp do niej równolegle (jak w każda inna implementacja pamięci współużytkowanej).

+0

Witaj Gregor, byłbym szczęśliwy mając twoją opinię na ten temat. Stoję w obliczu: http://stackoverflow.com/questions/26088868/asynchronous-task-queue-processing-of-in-memory-data- strukture-in-django Czy uważasz, że twoje rozwiązanie byłoby odpowiednie dla mojego problemu? Bardzo dziękuję – cyberjoac

+0

Cześć cyberjoac, ogólnie to może zadziałać, ale musisz wypróbować, czy Django i Seler żyją w tej samej grupie procesów (co wątpię). Daj mi znać, jeśli to działa, jestem zainteresowany! – Gregor

+1

Gdzie zainicjowałeś tego menedżera? –

Powiązane problemy