Функции в модуле эквивалентны статическим методам в классе. Проблема безопасности потоков возникает, когда несколько потоков могут изменять общие данные или даже один поток может изменять такие данные, в то время как другие читают их; Лучше всего этого избежать, если данные принадлежат ОДНОМУ модулю (доступ к которому осуществляется через Queue.Queue от других), но когда это невозможно, вам приходится прибегать к блокировке и другим, более сложным примитивам синхронизации.
Это применяется независимо от того, происходит ли доступ к совместно используемым данным в функциях модуля, статических методах или методах экземпляра - и общие данные таковы, являются ли они переменными экземпляра, классовыми или глобальными (область видимости и безопасность потоков по существу не связаны, за исключением того, что локальные данные функции, по сути, являются поточно-ориентированными - ни один другой поток никогда не увидит данные внутри экземпляра функции до тех пор, пока функция не намеренно «разделит» их через общие контейнеры).
Если вы используете модуль multiprocessing
в стандартной библиотеке Python вместо модуля threading
, на самом деле вам, возможно, не придется заботиться о «безопасности потоков» - в основном потому, что НИКАКИЕ данные не распределяются между процессами ... ну, если вы не выходите из своего пути, чтобы изменить это, например, через mmap
ped файлы; -).