У меня есть простое приложение 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] и есть вероятность, что потоки могут наступить друг другу на ноги.Здесь мне может понадобиться синхронизировать доступ к определенным данным.Если в моем приложении нет ввода-вывода, что еще нужно для синхронизации?Например, переменные класса должны быть заблокированы при редактировании?Нужно ли блокировать и отпускать функции, вызываемые несколькими потоками?Это то, что меня больше всего смущает.
Спасибо, Анджело