Python XMLRPC с параллельными запросами

Я могу быть укушен этим, но я думаю, что это - персональное предпочтение. Я не могу найти ссылку в документах каждому () быть отличающимся, чем ключи () или значения () (кроме очевидного, "они дают разные вещи" ответ. На самом деле документы указывают использованию тот же итератор, и они все возвращают фактические значения списка вместо копий их, и что изменение хеша при итерации по нему с помощью любого вызова плохо.

Однако я почти всегда использую ключи (), потому что мне это обычно - больше сам документирующий для доступа к значению ключа через сам хеш. Я иногда использую значения (), когда значение является ссылкой на большую структуру, и ключ к хешу был уже сохранен в структуре, в которой точке ключ избыточен, и мне не нужен он. Я думаю, что использовал каждого () 2 раза за 10 лет программирования Perl, и это был, вероятно, неправильный выбор оба раза =)

7
задан MattB 19 October 2009 в 14:54
поделиться

3 ответа

Я думаю, что модуль python SimpleXMLRPCServer - это то, что вам нужно. Я считаю, что поведение этой модели по умолчанию - блокировка новых запросов при обработке текущего запроса. Поведение по умолчанию доставило мне много проблем, и я изменил это поведение путем смешивания в классе ThreadingMixIn, чтобы мой сервер xmlrpc мог отвечать на несколько запросов одновременно.

class RPCThreading(SocketServer.ThreadingMixIn, SimpleXMLRPCServer.SimpleXMLRPCServer):
    pass

Если я правильно понимаю ваш вопрос, SimpleXMLRPCServer - это решение. Просто используйте его напрямую.

15
ответ дан 6 December 2019 в 14:05
поделиться

Можно еще один канал связи? Если да, тогда между сервером и клиентами должен работать протокол «перезвони мне, когда настанет моя очередь».

Другими словами, каждый клиент зарегистрирует свое намерение отправлять запросы на сервер, и указанный сервер будет » обратный вызов "следующего клиента, когда он будет готов.

0
ответ дан 6 December 2019 в 14:05
поделиться

Есть несколько вариантов:

  1. Использовать однопроцессный-однопоточный сервер, например SimpleXMLRPCServer для последующей обработки запросов.
  2. Используйте threading.Lock () на многопоточном сервере.
  3. У вас есть некоторый внешний механизм блокировки (например, модуль lockfile или функция GET_LOCK () в mysql) на многопроцессорном сервере.
]
0
ответ дан 6 December 2019 в 14:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: