Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 8, 2016 18:10:57

dvdBob
Зарегистрирован: 2016-01-08
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Запуск асинхронной задачи c помощью asyncio

Здравствуйте!

Не могу разобраться в документации 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() запускается в синхронном режиме и сервер на отвечает на запросы отрисовки, пока процесс не отработает.

Офлайн

#2 Янв. 8, 2016 18:25:19

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Запуск асинхронной задачи c помощью asyncio

Мне кажется, Вы немного не то делаете.
Гляньте в эту сторону
Или в эту

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version