Использование переменной класса Python в разных потоках имеет разное значение
Я запутался в доступе к переменным класса через многопоточность. У меня django приложение и я инициализирую класс при запуске сервера, чтобы внедрить некоторую конфигурацию. Затем при запросе пользователя я вызываю некоторый метод на этом классе, но конфигурация None.
class SharedService:
_queue_name = None
@staticmethod
def config(queue_name=None):
if queue_name:
SharedService._queue_name = queue_name
print(SharedService._queue_name) # this print the "alert"
@staticmethod
def send_message(data):
print(SharedService._queue_name) # this print None should print "alert"
если полезно в классе настроек django, загружаемом при запуске, я делаю:
SharedService.config(queue_name="alert")
и в конечной точке пользователя я просто вызываю:
SharedService.send_message("blabla")
Я уверен, что раньше это работало, но мы недавно обновили python 3.10 и django 3.2, и это может быть связано (или нет!)
Ок, это было полностью из внешнего поля!
Общий сервис взят из внешней библиотеки и фактически может быть импортирован из двух путей из-за ошибок в нашем пути к python.
В файле настроек я делал
from lib.services import SharedService
Из кода обработки запросов
from services import SharedService
Что очевидно создает два разных определения класса и, таким образом, второе использование не инициализируется.