我正在浏览一些asyncio
网络和实现的源代码,这在我的脑海中提出了一个问题。在
为了在等待数据从套接字到达时创建非阻塞I/O,其末尾的asyncio.StreamReader.read()
调用_wait_for_data
方法,该方法creates an empty ^{
在^{
这完全有道理。在
我的问题是:
为什么不使用^{_wait_for_data
调用创建一个新的Future,而是初始化一个类中的单个事件,并在其生存期内简单地切换其值。它还具有特定的.wait()
方法,用于等待其值变为真(当新数据从套接字到达时)。在
有人能详细说明这两种方法之间是否有实际的区别吗?或者只是一种随意选择的方法?在
未来是低级原始的。 它功能强大,但用户代码通常不需要它。 就像Linux有futex,但是用户代码使用高级对象,比如锁和递归锁。在
虽然通常您可以将
Future
替换为Event
,如果您不关心将来将填充的数据,我认为在这种情况下是不正确的。在在代码中,}意味着这个异常将在等待未来的代码中引发:
self._waiter
不仅用于指示唤醒事件,还用于指示发生的indicate exception。set_exception
到{如果将
self._waiter
更改为Event
,则无法实现此目标。在相关问题 更多 >
编程相关推荐