Функции в модуле эквивалентны статическим методам в классе. Проблема безопасности потоков возникает, когда несколько потоков могут изменять общие данные, или даже один поток может изменять такие данные, в то время как другие читают его; его лучше избегать, если данные будут принадлежать модулю ONE (доступ через Queue.Queue от других), но когда это невозможно, вам нужно прибегнуть к блокировке и другим, более сложным примитивам синхронизации.
Это относится к тому, происходит ли доступ к общим данным в функциях модуля, статических методах или методах экземпляра, а общие данные такие, как переменные экземпляра, классные или глобальные (область охвата и безопасность потоков по существу не пересекаются , за исключением того, что локально-локальные данные для pont, по сути поточно-безопасные - ни один другой поток никогда не увидит данные внутри экземпляра функции до тех пор, пока функция не намеренно «разделяет» ее через общие контейнеры).
Если вы используете модуль multiprocessing
в стандартной библиотеке Python, вместо модуля threading
, на самом деле вам не нужно заботиться о «безопасности потоков» - по существу, потому что НЕТ данных распределяется между процессами ... ну, если только вы уклоняетесь от своего пути, чтобы изменить это, например через mmap
файлы педалей ;-).
Вам не обязательно использовать prefork MPM. Вы можете использовать режим демонов mod_wsgi. В этом случае вы все равно можете использовать рабочий MPM, поскольку количество процессов и потоков, используемых режимом daemon mod_wsgi, контролируется отдельно. Использование prefork потребуется только для mod_python или встроенного режима mod_wsgi. –