К счастью для вас, количество реакторов легко сократить, в частности, до 1:
В любом конкретном витом процессе вы можете иметь только один реактор в одном потоке.Если вы попытаетесь получить больше, ничего не получится.
Весь смысл реактора, на самом деле, состоит в том, чтобы облегчить объединение нескольких источников событий в один поток.Если вы хотите прослушивать 3 разных порта с 3 разными протоколами, ваше приложение может выглядеть следующим образом:
from twisted.internet import reactor
reactor.listenTCP(4321, FirstProtocolFactory())
reactor.listenTCP(5432, SecondProtocolFactory())
reactor.listenTCP(6543, ThirdProtocolFactory())
reactor.run()
Конечно, на самом деле вы, возможно, не сами звоните listenTCP
, как вы, вероятно, хотитеиспользуйте Service
объекты из twisted.application.internet
, если вы используете twistd
, либо через файл .tac
, либо через плагин twistd
.И вам не нужно будет звонить reactor.run()
самостоятельно, если twistd
делает это для вас.Моя точка зрения заключается в том, что любыми средствами вы загружаете реактор всеми событиями, на которые вы ожидаете, что он отреагирует, - слушающими серверами, клиентскими подключениями, синхронизированными событиями - и он будет реагировать на каждый из них по мере его возникновения.(Следовательно, «реактор».)
Конкретные значения того, какими должны быть FirstProtocolFactory
, SecondProtocolFactory
и ThirdProtocolFactory
, см. В ссылках в ответе pyfunc.