Django - gunicorn - променлива на ниво приложение (споделена между работници)

Така че имам играчка django + gunicorn проект. Искам да имам статистически модел, който е доста голям, зареден в паметта само веднъж и след това да го използвам повторно в работниците/нишките.

Как/къде да дефинирам променлива на ниво приложение? Опитах се да го сложа на settings.py, а също и на wsgi.py


person David Przybilla    schedule 08.05.2015    source източник
comment
Какво се случи, когато опитахте това?   -  person Daniel Roseman    schedule 09.05.2015
comment
променливата може да бъде достъпна през цялото приложение, но има една променлива за работник, за разлика от един единствен екземпляр (singleton) Някакви съвети?   -  person David Przybilla    schedule 11.05.2015


Отговори (1)


Не мисля, че можете (нито трябва). Работниците са отделни процеси, които се разклоняват, преди да изпълнят някой от вашия код.

Можете да поставите „модела“ (какво е това, което го прави голям?) в Redis DB и да получите достъп до него във всеки работник оттам. Най-добрият вариант вероятно би бил да създадете отделна услуга, от която да изпълнявате един екземпляр и да комуникирате чрез HTTP или RPC от вашия работник (разгледайте nameko за лесна рамка за (микро)услуги.

Друг вариант би бил да използвате един работник Celery и да направите статистическите изчисления в задача.

person Tino    schedule 09.12.2016