Найти - Пользователи
Полная версия: Запуск асинхронной задачи c помощью asyncio
Начало » Python для новичков » Запуск асинхронной задачи c помощью asyncio
1
dvdBob
Здравствуйте!

Не могу разобраться в документации https://docs.python.org/3/library/asyncio-eventloop.html#asyncio-date-callback

Что должно быть:
Страница сайта периодически читает данные из БД, а пользователь по нажатию кнопки должен запустить долгую процедуру заполнения БД и видеть процесс заполнения в реальном времени.

Что есть:
JS функция show отправляет каждые 500мс ajax запрос на адрес /api/show и отрисовывает список строк из БД.

На сервере (Flask) ей отвечает функция
@app.route('/api/show')
def show():
    records = ...
    return json.dumps(records, cls=AlchemyEncoder)

Вторая JS функция по кнопке “Запустить долгую задачу” отправляет ajax запрос на адрес /api/start_db_fill

На сервере ей отвечает функция
@app.route('/api/start_db_fill')
def start_db_fill():
    p = Process(target=worker)
    p.start()
    p.join()
    return json.dumps('')
    
def worker():
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    loop = asyncio.get_event_loop()
    loop.run_until_complete(db_fill())
    
@asyncio.coroutine
def db_fill():
    ...

Что не работает:
Функция заполнения БД db_fill() запускается в синхронном режиме и сервер на отвечает на запросы отрисовки, пока процесс не отработает.
4kpt_IV
Мне кажется, Вы немного не то делаете.
Гляньте в эту сторону
Или в эту
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB