Я создаю программу, которая имеет класс, используемый локально, но я хочу, чтобы один и тот же класс использовался таким же образом по сети. Это означает, что мне нужно иметь возможность делать синхронные вызовы любому из своих общедоступных методов. Класс читает и записывает файлы, поэтому я считаю, что XML-RPC слишком накладные. Я создал базовый клиент/сервер rpc, используя примеры из скрученного, но у меня возникают проблемы с клиентом.Как выполнять синхронные вызовы rpc
c = ClientCreator(reactor, Greeter)
c.connectTCP(self.host, self.port).addCallback(request)
reactor.run()
Это работает для одного вызова, когда данные получил я звоню reactor.stop(), но если я сделаю больше звонков реактор не будет перезагружен. Есть ли что-то еще, что я должен использовать для этого? может быть, другой витой модуль или другая структура?
(я не в том числе сведения о том, как работает протокол, потому что главное, что я получаю только один вызов из этого.)
Добавление & Разъяснение:
Я поделился Google doc с заметками о том, что я делаю. http://docs.google.com/Doc?id=ddv9rsfd_37ftshgpgz
У меня есть версия, которая использует плавкий предохранитель и может объединять несколько локальных папок в точке крепления плавкого предохранителя. Доступ к файлу уже обрабатывается внутри класса, поэтому я хочу иметь серверы, которые дают мне доступ к сети одному классу. После продолжения поиска я подозреваю, что pyro (http://pyro.sourceforge.net/) может быть тем, что я действительно ищу (просто на основе чтения их домашней страницы прямо сейчас), но я открыт для любых предложений.
Я мог бы добиться аналогичных результатов с помощью монтирования nfs и комбинирования его с моей локальной папкой, но я хочу, чтобы все одноранговые узлы имели доступ к одной и той же объединенной файловой системе, так что каждый компьютер должен был петь nfs-сервер с количество монтируемых nfs равно числу компьютеров в сети.
Вывод: Я решил использовать rpyc, поскольку он дал мне именно то, что я искал. Сервер, который хранит экземпляр класса, который я могу манипулировать, как если бы он был локальным. Если кому-то интересно, я поставил свой проект на Launchpad (http://launchpad.net/dstorage).
Под «не останавливайтесь», вы имеете в виду, не называйте jet.stop()? – 2008-11-11 22:23:03
Часть того, что я не понимаю, заключается в том, что когда я вызываю реактор.run(), похоже, он переходит в цикл, который просто следит за сетевой активностью. Как продолжить работу с остальной частью моей программы, когда она использует сеть? если я смогу пройти мимо этого, то я, вероятно, смогу решить проблему синхронности. – 2008-11-11 22:23:54