Я могу быть укушен этим, но я думаю, что это - персональное предпочтение. Я не могу найти ссылку в документах каждому () быть отличающимся, чем ключи () или значения () (кроме очевидного, "они дают разные вещи" ответ. На самом деле документы указывают использованию тот же итератор, и они все возвращают фактические значения списка вместо копий их, и что изменение хеша при итерации по нему с помощью любого вызова плохо.
Однако я почти всегда использую ключи (), потому что мне это обычно - больше сам документирующий для доступа к значению ключа через сам хеш. Я иногда использую значения (), когда значение является ссылкой на большую структуру, и ключ к хешу был уже сохранен в структуре, в которой точке ключ избыточен, и мне не нужен он. Я думаю, что использовал каждого () 2 раза за 10 лет программирования Perl, и это был, вероятно, неправильный выбор оба раза =)
Я думаю, что модуль python SimpleXMLRPCServer - это то, что вам нужно. Я считаю, что поведение этой модели по умолчанию - блокировка новых запросов при обработке текущего запроса. Поведение по умолчанию доставило мне много проблем, и я изменил это поведение путем смешивания в классе ThreadingMixIn, чтобы мой сервер xmlrpc мог отвечать на несколько запросов одновременно.
class RPCThreading(SocketServer.ThreadingMixIn, SimpleXMLRPCServer.SimpleXMLRPCServer):
pass
Если я правильно понимаю ваш вопрос, SimpleXMLRPCServer - это решение. Просто используйте его напрямую.
Можно еще один канал связи? Если да, тогда между сервером и клиентами должен работать протокол «перезвони мне, когда настанет моя очередь».
Другими словами, каждый клиент зарегистрирует свое намерение отправлять запросы на сервер, и указанный сервер будет » обратный вызов "следующего клиента, когда он будет готов.
Есть несколько вариантов:
SimpleXMLRPCServer
для последующей обработки запросов. threading.Lock ()
на многопоточном сервере. lockfile
или функция GET_LOCK ()
в mysql) на многопроцессорном сервере.