Как вызывать асинхронные функции, не ожидая от них возврата? - PullRequest
1 голос
/ 18 мая 2019

В приведенном ниже коде я хотел бы вызвать task1 и task2, но БЕЗ ожидания ожидаемых результатов от этих методов, возможно ли это?

import asyncio
async def say(something, delay):
  await asyncio.sleep(delay)
  print(something)

loop = asyncio.get_event_loop()
task1 = loop.create_task(say('hi', 1))
task2 = loop.create_task(say('hoi', 2))
loop.run_until_complete(asyncio.gather(task1, task2))

Я хотел бы обработать что-то из очереди, которая попадает вmain в цикле while, без ожидания, потому что мне не нужно возвращать функции, например, псевдокод:

import asyncio
async def say(something, delay):
  await asyncio.sleep(delay)
  print(something)

def main():
    while True:
        # search for database news
        # call say asynchronous, but I do not need any return, I just want you to do anything, independent
        time.sleep(1)

1 Ответ

3 голосов
/ 18 мая 2019

Если я правильно вас понял, то, что вы хотите, вы уже имеете, когда создаете задание.Созданное задание будет выполнено "в фоновом режиме" : вам не нужно его ждать.

import asyncio


async def say(something, delay):
  await asyncio.sleep(delay)
  print(something)


async def main():
    # run tasks without awaiting for their results
    for i in range(5):
        asyncio.create_task(say(i, i))

    # do something while tasks running "in background"
    while True:
        print('Do something different')
        await asyncio.sleep(1)


asyncio.run(main())

Результат:

Do something different
0
Do something different
1
2
Do something different
3
Do something different
4
Do something different
Do something different
Do something different
Do something different
...