У меня есть код, который будет работать на сервере.Это может занять много времени (минимум минут).Я хочу иметь возможность опрашивать сервер, где в коде это в настоящее время.Я думал, что мог бы использовать asyncio
, но похоже, что это не то, что мне нужно.
Вот некоторый код, который я написал, чтобы протестировать его (сохраненный как test_async.py
):
import asyncio
import time
the_status = 'idle'
async def waiting():
global the_status
await asyncio.sleep(0.001)
the_status = 'running'
time.sleep(30)
the_status = 'finished'
def get_status():
global the_status
return the_status
async def main():
loop.create_task(waiting())
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()
Я запускаю его, открыв консоль Python и введя:
from test_async import *
Я ожидал, что он начнет работать waiting()
, изменит the_status
на «работа», а затем подождет 30 секунд, прежде чем перевести состояние в «готово».В то же время, я должен получить консольную подсказку обратно, и я смог бы получить текущее состояние, набрав get_status()
.
На самом деле происходит то, что переменная the_status
никогда не меняется от своего первоначальногосостояние «простоя».
Я что-то не так делаю?Разве asyncio не является ответом на то, что я пытаюсь сделать?
Моя версия Python - 3.6.