我在做一個需要能夠處理大量命令的SocketServer。所以爲了防止我的RequestHandler過長,它會根據命令調用不同的函數。我的困境是如何讓信息發回給客戶。濫用產量
目前,我正在使功能「屈服」它想要發送回客戶端的所有內容。但我認爲這可能不是pythonic的方式。
# RequestHandler
func = __commands__.get(command, unkown_command)
for message in func():
self.send(message)
# example_func
def example():
yield 'ip: {}'.format(ip)
yield 'count: {}'.format(count)
. . .
for ping in pinger(ip,count):
yield ping
這是對產量的醜惡使用嗎?我能想到的唯一的備選是,如果當RequestHandler調用該函數是通過自身作爲參數傳入
func(self)
,然後在功能
def example(handler):
. . .
handler.send('ip: {}'.format(ip))
但這種方式並沒有感覺好多了。
您也可以使用lambda。應該使測試更容易。 – Sorin
@Sorin你的意思是這樣的:func(lambda x:self.send(x))? – Lufftre
這兩種解決方案在技術上都是正確的,兩者都是同樣可測試的......第一個解決方案將處理函數完全解耦(如果沒有任何函數必須從處理程序中知道任何東西,這很好),第二個是最明顯的對於一個Python新手來說 - 這就是你如何使用沒有生成器的語言來做到這一點。 –