1
我正在玩弄扭曲,我試圖創建一個簡單的主服務器,它向其從服務器分發單元測試列表。以下代碼有效,但我的輸出很奇怪。從機執行最後一次單元測試n次,而不是執行n次測試中的每一次。扭曲的回調鏈錯誤地重複了最後一個回調
我正在使用twisted內建的放大器協議。這裏是相關的代碼:
class Master(object):
def __init__(self):
self.tests = [
"test1",
"tests2",
... etc
]
def serve(self):
self.factory = MasterFactory()
reactor.listenTCP(1234, self.factory)
d = threads.deferToThread(self.get_cmd)
d.addCallback(lambda ign: self.run_test())
print 'Serving on port 1234'
def get_cmd(self):
return raw_input('> ')
def run_test(self):
while True:
for slave in self.factory.slaves.values():
if self.tests == []:
break
slave.tests.append(self.tests.pop(0))
if self.tests == []:
break
for slave in self.factory.slaves.values():
self.construct_list(slave)
def construct_list(self, slave):
d = defer.Deferred()
for test in slave.tests:
d.addCallback(lambda ign:
slave.protocol.callRemote(commands.RunCmd, cmd="python setup.py trial -s " + test))
d.addCallback(self.cmd_response)
d.callback(None)
def cmd_response(self, response):
print response['output']
return None
def main():
m = Master()
m.serve()
reactor.run()
if __name__ == "__main__":
main()
另外,'run_test'中的邏輯可以使用'itertools.cycle'來簡化。我會做''測試,奴隸在zip(self.tests,循環(self.factory.slaves.values())):slave.tests.append(測試)',然後'self.tests = [] '。 –