将可以等待的操作移动到方法的顶部,以便在等待期间进行工作,这样做是否有意义?
示例
按逻辑顺序排列
async def set_new_password(user_id, new_password):
hash = bcrypt(new_password)
db_handle = await async_get_db_handle()
await async_write_password(db_handle, user_id, hash)
在这里,Python会计算哈希值,然后为数据库操作创建协程,接着为写操作创建协程,最后将控制权交给事件循环以调度这两个操作。
在这种情况下,假设这是我们唯一的方法调用,我们“浪费”了时间来计算密码的哈希值,下面的方法会更快。
尽可能延迟同步
async def set_new_password(user_id, new_password):
db_handle = await async_get_db_handle()
hash = bcrypt(new_password)
await async_write_password(dh_handle, user_id, hash)
在此期间等待db_handle时,密码将被哈希处理,因此我们可以利用这段“闲暇时间”做一些有用的事情。
那么我应该尽可能晚地放置不可等待语句,以便它们可以在等待语句等待时执行吗?