Django: выполнение нескольких задач параллельно - PullRequest
0 голосов
/ 18 мая 2018

У меня есть сборка веб-приложения из Django версии 2.0.1

Пользователь загружает файл, и в зависимости от содержимого существуют задачи, которые выполняются последовательно.После выполнения результаты отображаются пользователю.Некоторые задачи не зависят друг от друга.

Я хочу выполнять независимые задачи параллельно.Я попытался использовать многопроцессорность в views.py, но при порождении процессов возникают некоторые ошибки.Эти задачи анализируют некоторую информацию и записывают в файл.Затем файлы объединяются, чтобы показать результаты пользователю.

Эти задачи нельзя выполнять асинхронно, поскольку полученные результаты необходимо показать ожидающему пользователю.Поэтому я отказался от идеи использования сельдерея, как рекомендовано в других обсуждениях.

Любые предложения будут полезны.

Спасибо

Ошибка получена

Это была ошибка, которую мы получилиTraceback (последний вызов был последним): C: \ Users\ idea \ AppData \ Local \ Enthought \ Canopy \ edm \ envs \ python \ lib \ multiprocessing \ spawn.py ", строка 106, в spawn_main exitcode = _main (fd) Файл" C: \ Users \ idea \ AppData \ Local \ "Enthought \ Canopy \ edm \ envs \ python \ lib \ multiprocessing \ spawn.py ", строка 116, в файле _main self = pickle.load (from_parent)" G: \ work \ gitrepo \ suprath-github \ smartdata \ ssd \ FinalPlots\ uploads \ core \ views.py ", строка 6, из файла uploads.core.models import файл документа" G: \ work \ gitrepo \ suprath-github \ smartdata \ ssd \ FinalPlots \ uploads \ core \ models.py ",строка 7, в классе Document (models.Model): файл "C: \ Users \ idea \ AppData \ Local \ Enthought \ Canopy \ edm \ envs \ python \ lib \ site-packages \ django \ db \ models \ base.py", строка 100, в new app_config = apps.get_conisting_app_config (module) Файл" C: \ Users \ idea \ AppData \ Local \ Enthought \ Canopy \ edm \ envs \ python \ lib \ site-packages \Đăngo \ apps \ registry.py ", строка 244, в файле get_conisting_app_config self.check_apps_ready ()" C: \ Users \ idea \ AppData \ Local \ Enthought \ Canopy \ edm \ envs \ python \ lib \ site-packages \ django \apps \ registry.py ", строка 127, в check_apps_ready поднимите AppRegistryNotReady (" Приложения еще не загружены. ") django.core.exceptions.AppRegistryNotReady: Приложения еще не загружены.Traceback (последний вызов был последним):

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Я согласен с решением, предоставленным @bruno desthuillieres, однако вы можете реализовать какое-либо решение для сокетов, чтобы обратиться к пользователю.

Поскольку опрос от пользователя может иметь огромное влияние на производительность, решение для сокетов будет идеальнымдля этого случая.

0 голосов
/ 18 мая 2018

Эти задачи нельзя выполнить асинхронно, поскольку полученные результаты необходимо показать ожидающему пользователю

Это не означает, что вы не можете использовать асинхронную очередь (сельдерей или другое).У нас очень похожий вариант использования, и мы используем сельдерей для выполнения задач.Задачи (частично параллельные, частично последовательные) сохраняют свой прогресс в redis, а опросы внешнего интерфейса получают текущее состояние и отображают прогресс для пользователя, а затем, когда весь процесс завершен (успешно или нет), мы отображаем результат (илиошибки).

...