【发布时间】:2021-04-02 18:20:00
【问题描述】:
我最近开始玩 discord 机器人,但我有一个疑问,那就是是否必须将 async 函数用于 discord 命令。如果是,那么有人可以告诉我区别(根据不和谐的机器人行为)
【问题讨论】:
标签: async-await discord discord.py python-asyncio discord.py-rewrite
我最近开始玩 discord 机器人,但我有一个疑问,那就是是否必须将 async 函数用于 discord 命令。如果是,那么有人可以告诉我区别(根据不和谐的机器人行为)
【问题讨论】:
标签: async-await discord discord.py python-asyncio discord.py-rewrite
同步基本上意味着您一次只能执行一件事。异步意味着您可以一次执行多个操作,而不必完成当前操作即可继续执行下一个操作。这是一个异步编程的例子。
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()
样本输出
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]
协程并发执行并在不同的时间完成执行,重要的是要注意这些不按照提交时的相同顺序完成。
这是正常同步编程中的相同代码
import random
import time
def work(id):
process_time = random.randint(1, 5)
time.sleep(process_time)
print(f'Function: {id}, has succesfully completed after {process_time} seconds')
def main():
for i in range(10):
work(i)
main()
样本输出
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]
所有函数都按照它们被调用的顺序完成。
基本上,如果库是用普通同步代码编写的,您将无法同时使用多个命令/事件,您需要等到前一个完成,然后调用下一个.
【讨论】: