inlineCallbacks
не запускает никаких потоков ОС. Это просто другой интерфейс для использования Deferred
. Deferred
- это просто API для работы с обратными вызовами.
queue.get()
возвращает Deferred
. Когда вы его дадите, inlineCallbacks
внутренне добавляет к нему обратный вызов, и ваша функция останется приостановленной. Когда сработает обратный вызов, inlineCallbacks
возобновит вашу функцию со значением, переданным обратному вызову, что является «результатом» полученного вами Deferred
.
Все, что происходит, - это создание Deferred
объектов и добавление к ним некоторых обратных вызовов. Где-то внутри реализации вашего Redis-клиента, некоторые источники событий «запускают» Deferred
с результатом, который запускает процесс вызова его обратных вызовов.
Вы можете иметь как можно больше из них:
* поскольку у вас есть системная память для хранения
* как клиент Redis может отслеживать одновременно
Я не знаю деталей того, как реализован ваш Redis-клиент. Если необходимо открыть сокет для каждой очереди, вы, вероятно, будете ограничены количеством дескрипторов файлов, которые вы можете открыть, или количеством сокетов, которые может поддерживать ваша система. Эти числа будут где-то в десятках тысяч, и когда вы натолкнетесь на них, вы можете использовать приемы для дальнейшего повышения лимита.
Если ему не нужно открывать сокет для каждой очереди (например, если он может мультиплексировать уведомления для всех очередей через один сокет), то он, вероятно, имеет предел, который намного, намного выше (возможно, обусловленный алгоритмической сложностью самой медленной части его реализации).