Я работаю на сервере xmlrpc, который циклически выполняет определенные задачи. Я использую скручен как ядро службы XmlRpc но я бег в небольшую проблему:Многопроцессорная обработка Python с помощью скрученного реактора
class cemeteryRPC(xmlrpc.XMLRPC):
def __init__(self, dic):
xmlrpc.XMLRPC.__init__(self)
def xmlrpc_foo(self):
return 1
def cycle(self):
print "Hello"
time.sleep(3)
class cemeteryM(base):
def __init__(self, dic): # dic is for cemetery
multiprocessing.Process.__init__(self)
self.cemRPC = cemeteryRPC()
def run(self):
# Start reactor on a second process
reactor.listenTCP(c.PORT_XMLRPC, server.Site(self.cemRPC))
p = multiprocessing.Process(target=reactor.run)
p.start()
while not self.exit.is_set():
self.cemRPC.cycle()
#p.join()
if __name__ == "__main__":
import errno
test = cemeteryM()
test.start()
# trying new method
notintr = False
while not notintr:
try:
test.join()
notintr = True
except OSError, ose:
if ose.errno != errno.EINTR:
raise ose
except KeyboardInterrupt:
notintr = True
Как я должен идти о присоединении этих два процесса таким образом, чтобы их соответствующие объединения не блокирует?
(я очень смущен «присоединиться». Почему это блок, и я гугле, но не может найти много полезной объяснения к использованию соединения. Может кто-нибудь объяснить мне это?)
Привет
oh man thx много, поэтому мне нужно точно. Откуда вы узнали о LoopingCall? Вот почему я ненавижу скручивание - документации недостаточно, с одной стороны, в то время как API-интерфейсы настолько велики, что вы склонны игнорировать важные биты. – 2009-09-04 18:49:32
Я знаю, что вы имеете в виду - Twisted может быть сложно узнать, но как только вы получите идею, она отлично работает! Книга O'Reilly довольно старая, но она очень хорошо объясняет, поэтому я рекомендую получить ее копию, если вы собираетесь делать больше с Twisted. –
Я рекомендую подписаться на их список рассылки. Если вы прочтете достаточно ответов от гуру, некоторые из них начинают вставлять * мозг-осмос *. – DrBloodmoney