витая: один клиент, много серверов - PullRequest
7 голосов
/ 06 июля 2010

Я пытаюсь использовать twisted для создания кластера компьютеров, которые запускают одну программу на части большего набора данных.

Мои «серверы» получают часть данных от клиента и запускают команду xна нем.

Мой «клиент» подключается к нескольким серверам, передавая каждому из них порцию данных и сообщая им, с какими параметрами выполнить команду x.

Мой вопрос: есть ли способнастроить реакторный цикл для подключения ко многим серверам:

reactor.connectTCP('localhost', PORT, BlastFactory())
reactor.run()

или мне нужно поменять местами клиент и сервер в моей парадигме?

1 Ответ

8 голосов
/ 06 июля 2010

Просто позвоните connectTCP несколько раз.

Хитрость, конечно, в том, что reactor.run() блокирует "навсегда" (весь период выполнения вашей программы), поэтому вы не хотите вызывать , что несколько раз.

У вас есть несколько вариантов; Вы можете установить синхронизированный вызов для установления будущих соединений или начать новые соединения с событий в вашем соединении (например, connectionLost или clientConnectionFailed).

Или, самое простое, вы можете просто настроить несколько попыток подключения до того, как reactor.run() запустит весь сеанс, например:

for host in hosts:
    reactor.connectTCP(host, PORT, BlastFactory())
reactor.run()
...