Передача данных между потоками asyncio

Каким образом можно передавать данные между потоками asyncio? Можно создать глобальную переменную. Есть ли аналог golang каналов?


Ответы (1 шт):

Автор решения: eri

@Yakov - хоть питон и одномоментно работает в одном ядре - это ядро может меняться, а данные могут остаться в кеше другого ядра. Да и GIL блокирует только функции реализованные на питоне. Сишный вызов (Ввод-Вывод - как частный случай) может работать паралельно.

Передача через переменную совсем не безопасна в нагруженной системе. Чтоб обратиться к глобальной переменной нужно поставить блокировку через лок или кондишн.

Очереди идеальный вариант передачи из одного потока в другой, если передаем последовательности.

→ Ссылка