Сделайте функции разговора асинхронными c, иначе нет смысла использовать asyncio
.
class Cat:
async def talk():
print("Meow")
class Dog:
async def talk():
print("Woof")
cat = Cat()
dog = Dog()
animal_list = [cat, dog]
Создать список (Iterable) сопрограмм, возвращаемых animal.talk()
.
Любой coroutines = map(lambda animal : animal.talk(), animal_list)
или coroutines = [animal.talk() for animal in animal_list]
сделает.
Затем, наконец, запланирован список сопрограмм для выполнения.
# This returns the results of the async functions together.
results = await asyncio.gather(coroutines)
# This returns the results one by one.
for future in asyncio.as_completed(coroutines):
result = await future
cat.talk()
и dog.talk()
будут выполняться асинхронно, что означает порядок их выполнения не гарантируется, и может выполняться на разных потоках. Но здесь функция talk
настолько проста, что выглядит так, как будто она запускается синхронно, и не дает никаких реальных преимуществ.
Но если talk
требует выполнения сетевого запроса или длинных, тяжелых вычислений, и animal_list
были очень длинными, это может помочь с производительностью.