Глобальные переменные совместно используются всеми потоками, поэтому, если вы запустите эти функции, потоки будут конфликтовать друг с другом непредсказуемым образом.
Чтобы сделать то, что вы хотите, вы можете использовать локальные данные потока, используя threading.local .Вам нужно удалить глобальное определение ctx
и затем создать следующую функцию.
def get_ctx():
thread_data = threading.local()
if not hasattr(thread_data, "ctx"):
thread_data.ctx = Ctx()
return thread_data.ctx
Затем везде, где вы ссылаетесь на ctx
, вызывайте get_ctx()
.Это гарантирует, что ваш контекст не будет разделен между потоками.