我在做一个需要能够处理大量命令的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新手来说 - 这就是你如何使用没有生成器的语言来做到这一点。 –