我正在发现Python协程,它很有意义。我知道它们是更“通用”的函数,有多个入口点和出口点,可以向不同的接收器返回值。但是,当以及为什么协程比常规函数更受青睐时,谁能给出一个总结?
发布于 2015-08-27 08:59:00
当它们比常规函数更容易为您的用例创建时。这可能意味着许多不同的事情,所以这里有一个例子:
您有一个读取和发送数据的服务器,但是您正在实现一个具有某种状态的协议。现在你有两个选择:
使状态显式,并将其保存在某个对象中,然后您将得到如下设计:
class ClientConnection():
def __init__(self):
self.current_state = START
def new_data(self, data):
if self.current_state == START:
self.current_state = do_auth(data)
elif self.current_state == SOMETHING_ELSE:
self.current_state = do_something_else(data)
elif ...或者将状态设为隐式,然后一遍又一遍地输入相同的函数:
def connection(self):
auth_data = yield
if not do_auth(auth_data):
raise something
more_data = yield(AUTH_OK)
yield from do_something_else(more_data)
...现在,如果您有一个巨大的状态机,并且流程不是微不足道的,那么第一种选择可能更好。如果你有一个更简单的情况(auth,get命令,发送结果),第二个选项可能更好。
https://stackoverflow.com/questions/32238949
复制相似问题