Процесс WSGI / флаги потоков и путаница синхронизации - PullRequest
0 голосов
/ 17 января 2012

У меня есть простое приложение wsgi, работающее с Apache prefork MPM, и я читал документы modwsgi по процессам и потокам (действительно хорошее чтение).Я все еще запутался в нескольких вещах и в том, что нужно для синхронизации.

/ 1 Если моя конфигурация Apache - это всего лишь простой WSGIScriptAlias ​​для моего приложения wsgi, например:

WSGIScriptAlias /alias_name /path/to/wsgi/app.wsgi

и при условии предварительной сборки Apache MPM, флаги потока и процесса wsgi появляются следующим образом [wsgi.multiprocess = True, wsgi.multithread = False].Я понимаю, что это означает, что один запрос (без потоков) обрабатывает каждый запрос.И на этих условиях мне не нужно ничего синхронизировать, потому что я не делаю IPC между процессами, и каждый процесс имеет свое собственное адресное пространство.Это правильное мышление?

/ 2 Если мой конфиг Apache использовал WSGIDaemonPrcoesses, однако:

WSGIScriptAlias /alias_name /path/to/wsgi/app.wsgi

WSGIDaemonProcess wsgi_proc_names processes=2 threads=2

WSGIProcessGroup  wsgi_proc_names

, тогда флаги wsgi появляются как [wsgi.multiprocess = true,wsgi.multithread = true] и есть вероятность, что потоки могут наступить друг другу на ноги.Здесь мне может понадобиться синхронизировать доступ к определенным данным.Если в моем приложении нет ввода-вывода, что еще нужно для синхронизации?Например, переменные класса должны быть заблокированы при редактировании?Нужно ли блокировать и отпускать функции, вызываемые несколькими потоками?Это то, что меня больше всего смущает.

Спасибо, Анджело

1 Ответ

0 голосов
/ 15 февраля 2012

Анджело, Что касается № 1, ваше мышление кажется крепким.

Ваш второй вопрос (# 2) немного сложнее.Но, насколько я знаю, вам нужно заблокировать ввод / вывод (так что в вашем случае ничего).Каждый поток должен иметь свой собственный стек вызовов, поэтому я не думаю, что вам нужно блокировать функции.Единственное, что может нуждаться в блокировке - это глобальные переменные.Но вы не упомянули, что будете их использовать.

...