pro*_*cer 4 python async-await
将等待的操作移动到方法的顶部以便能够在等待时进行工作是否有意义?
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)
Run Code Online (Sandbox Code Playgroud)
这里afaiu Python将计算哈希值,然后为db句柄创建协同程序,然后为写入操作创建协同程序,然后控制将调度两个操作的事件循环.
在这种情况下,假设这是我们唯一的方法调用,我们"浪费"时间哈希密码,以下将更快.
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)
Run Code Online (Sandbox Code Playgroud)
在等待db_handle时,密码将被哈希处理,因此我们将使用"停机时间"来做一些有用的事情.
那么我是否应该尽可能地尽可能晚地提出不可饶恕的陈述,以便在等待期待的陈述时执行它们?
...在等待db_handle时,密码将被哈希处理,因此我们将使用"停机时间"来做一些有用的事情.
我不认为这是正确的.效果await是阻止下一行执行,直到返回db_handle.它使调用代码的行为类似于同步代码,因此正常的排序注意事项适用.
如果你想在获取句柄时做一些工作,你可以使用任务.
async def set_new_password(user_id, new_password):
task = asyncio.create_task(get_db_handle())
hash = bcrypt(new_password)
db_handle = await task
await async_write_password(db_handle, user_id, hash)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |