@dsendy

Как отдать управление из цикла python asyncio?

Можно сделать так, чтобы одна функция вызывалась раз в 10 секунд, а в остальное время работала другая? У меня вызывается все сразу.
async def hello():
	print('hello')
	await asyncio.sleep(10)

async def world():
	while 1:
		try: 
			await asyncio.wait_for(hello(), timeout=0.1)
		except:
			print('world')

asyncio.run(world())
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
ri_gilfanov
@ri_gilfanov
Web- and desktop-developer
Сохранить в файл и запустить (значения sleep выставлены на 0.2 и 0.8 секунды для наглядности):
import asyncio


async def hello():
  while True:
      await asyncio.sleep(0.2)
      print('hello')

async def world():
  while True:
      await asyncio.sleep(0.8)
      print('world')

async def asynchronous():
    tasks = [asyncio.ensure_future(hello()), asyncio.ensure_future(world())]
    await asyncio.wait(tasks)


loop = asyncio.get_event_loop()
loop.run_until_complete(asynchronous())
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@bacon
вызвать hello до while, внутри hello так же сделать бесконечный while
Ответ написан
@QWERTYUIOPas
Вместо asyncio.run(world())
Пиши asyncio.run(world)
Функция world() ничего не возвращает.
Либо asyncio.run(lambda:world())
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы