Я запускаю функцию в потоке, в этой функции я что-то храню в переменной. Как я могу использовать эту переменную вне функции и после завершения работы потока? Пример того, что я пытаюсь сделать:
def f():
response = 1+1
threading.Thread(target=f).start()
print(response)
Глобальная переменная не работает. Я создаю бота Discord, поэтому, скорее всего, несколько человек будут хранить информацию в глобальной переменной. Таким образом, пользователь может получить от кого-то еще вывод @TimRoberts
Взгляните на concurrent.futures
!
Вы можете создать глобальный список и назначить каждому потоку идентификационный номер, который является его слотом в списке. Другой способ - использовать Queue
. Попросите потоки подавать свой вывод в очередь и выдавать результаты по мере их завершения. Концепция concurrent.futures
- еще один очень хороший метод.
Точно так же, как и с любой обычной функцией. Использование потоков не меняет этого. Вы сохраняете его в глобальном, или добавляете его к какому-то глобальному объекту, или передаете объект в функцию потока и заставляете его обновлять его .. Единственное изменение с потоковой передачей заключается в том, что глобальный объект не будет обновлен до тех пор, пока поток не будет завершен и вы
.join
с ним.