Nil*_*Pal -2 async-await python-asyncio discord discord.py discord.py-rewrite
我最近开始玩 discord bots,我有一个疑问,即是否必须async
对不和谐命令使用函数。如果是,那么有人可以告诉我区别吗(根据不和谐的机器人行为)
同步基本上意味着您一次只能执行一件事。异步意味着您可以一次执行多项操作,而不必完成当前操作即可继续执行下一项操作。这是异步编程的示例。
import asyncio
import random
async def my_coroutine(id):
process_time = random.randint(1, 5)
await asyncio.sleep(process_time)
print(f'Coroutine: {id}, has succesfully completed after {process_time} seconds')
async def main():
tasks = []
for i in range(10):
tasks.append(asyncio.ensure_future(my_coroutine(i)))
await asyncio.gather(*tasks)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()
Run Code Online (Sandbox Code Playgroud)
样本输出
Coroutine: 4, has successfully completed after 1 seconds
Coroutine: 7, has successfully completed after 2 seconds
Coroutine: 8, has successfully completed after 2 seconds
Coroutine: 0, has successfully completed after 3 seconds
Coroutine: 1, has successfully completed after 3 seconds
Coroutine: 2, has successfully completed after 4 seconds
Coroutine: 6, has successfully completed after 4 seconds
Coroutine: 3, has successfully completed after 5 seconds
Coroutine: 5, has successfully completed after 5 seconds
Coroutine: 9, has successfully completed after 5 seconds
[Finished in 5.0s]
Run Code Online (Sandbox Code Playgroud)
该协程去,并且在不同的时间同时和完成执行执行,需要注意的是,这些都是很重要的不是在他们提交的相同顺序完成。
这是正常同步编程中的相同代码
Coroutine: 4, has successfully completed after 1 seconds
Coroutine: 7, has successfully completed after 2 seconds
Coroutine: 8, has successfully completed after 2 seconds
Coroutine: 0, has successfully completed after 3 seconds
Coroutine: 1, has successfully completed after 3 seconds
Coroutine: 2, has successfully completed after 4 seconds
Coroutine: 6, has successfully completed after 4 seconds
Coroutine: 3, has successfully completed after 5 seconds
Coroutine: 5, has successfully completed after 5 seconds
Coroutine: 9, has successfully completed after 5 seconds
[Finished in 5.0s]
Run Code Online (Sandbox Code Playgroud)
样本输出
Function: 0, has successfully completed after 5 seconds
Function: 1, has successfully completed after 3 seconds
Function: 2, has successfully completed after 4 seconds
Function: 3, has successfully completed after 2 seconds
Function: 4, has successfully completed after 3 seconds
Function: 5, has successfully completed after 4 seconds
Function: 6, has successfully completed after 2 seconds
Function: 7, has successfully completed after 5 seconds
Function: 8, has successfully completed after 5 seconds
Function: 9, has successfully completed after 1 seconds
[Finished in 24.0s]
Run Code Online (Sandbox Code Playgroud)
所有函数都按照它们被调用的顺序完成。
基本上,如果库是用普通同步代码编写的,您将无法同时使用多个命令/事件,您需要等到前一个完成,然后调用下一个。
归档时间: |
|
查看次数: |
196 次 |
最近记录: |