1

Тема: Async + django

Які потреби?

Треба робити доволі важку операцію: пропарсити урл адресу, але додатково ще 10 http запитів зробити до зовнішніх джерел. І повторювано: Користувач вносить в бд список з 100 урл. Системі треба пропарсити (і додатові 10 запитів) кожну з цих урл кожного дня!

Типу: моніторити за урлами користувача кожного дня.

Зрозуміло парсер має бути асинхронним, написав asyncio, python3.5 працює - ок.

Як поєднати з БД з джанго(а мо не джанго?)

Було кілька ідей, найживучіша:

Джанго, форма по якій юзер створює моніторинг. При додаванні урл, використати redis для зберігання в queue.
Окремим процесом запущений асинхронний парсер, який використовуючи queue.Queue, розбирає всі завдання.

Питання: Як додавати меседжі в queue.Queue? Має бути інший потік, при цьому використовувати ту саму область пам'яті. Вихід: threading.Thread ? (поки зупинився на цьому рішенні).

2. Якщо парсер - це окрема програма, окремий потік, як в бд відзначити результат парсингу. 1. Просто конект до БД напряму. - фігово, як на мене, через те, що дублються бекенди. Або 2 - створити API endpoint на джанго, і з парсера стукатись туди, казати що якась урл тільки що була оброблена?

Як на мене виглядає якось страшно і некрасиво, а що б порадили?

2 Востаннє редагувалося volodymyrko (23.07.2018 21:53:43)

Re: Async + django

як варіант може бути celery, принаймі не буде дублювання бекендів
як інший - все писати відразу на asyncio - і форму і парсер, але то по часу значно затратніше напевно (залежності від навичок)
хоча і джанго + окремий парсер на тому ж асинкіо також можна..

тільки queue вам напевно не треба - все через "якусь" базу

3

Re: Async + django

volodymyrko написав:

як варіант може бути celery, принаймі не буде дублювання бекендів

Оп, як таски асинхронно запускати? Multithreading в потоці celery worker?

volodymyrko написав:

як інший - все писати відразу на asyncio - і форму і парсер, але то по часу значно затратніше напевно (залежності від навичок)

- можна, навичок думаю хватить (писав на go з їхнім тільки внутрішніш пакетом go/net/http), але все рівно треба два різних потоки - один парсинг може займати 200 секунд

volodymyrko написав:

хоча і джанго + окремий парсер на тому ж асинкіо також можна..

О, я б дуже хотів джанго з asyncio? Як це можна зробити? Читав, гуглив - nope

volodymyrko написав:

тільки queue вам напевно не треба - все через "якусь" базу

так, redis думаю)

4

Re: Async + django

> Оп, як таски асинхронно запускати? Multithreading в потоці celery worker?

"асинхронно" - напевно все ж таке не правильне тут слово... і чи дійсно вам тут треба саме асинхронність ...
одним словом - подивість на селері... (тяжко щось радити не знаючи всіх вимог)

> джанго з asyncio?

пишите 2 різних "проекти"  на одній базі.. і буде  вам вкупі ...