繁体   English   中英

Django:并行运行一些任务

[英]Django: running a few tasks in parallel

我有一个基于Django 2.0.1构建的Web应用程序

用户上载文件,并且根据内容,存在以串行方式执行的任务。 执行后,结果将显示给用户。 有些任务是相互独立的。

我想并行执行独立任务。 我尝试在views.py使用多重处理,但是在生成进程时会引发一些错误。 这些任务分析一些信息并写入文件。 然后将文件合并以向用户显示结果。

这些任务不能异步完成,因为需要将产生的结果显示给用户等待。 因此,我放弃了在其他讨论中建议的使用Celery的想法。

任何人的建议都会有所帮助。

谢谢

错误得到

这是我们得到回溯错误(最近一次通话最近):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”,行_main self = pickle.load(from_parent) “ G:\\ work \\ gitrepo \\ suprath-github \\ smartdata \\ ssd \\ FinalPlots \\ uploads \\ core \\ views.py”,第6行,来自uploads.core.models导入文档文件“ 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行,在新的 app_config = apps.get_ contains_app_config(module)文件“ C:\\ Users \\ idea \\ AppData \\ Local \\ Enthought \\ Canopy \\ edm中\\ envs \\ python \\ lib \\ site-packages \\ django \\ apps \\ registry.py“,第244行,位于get_ contains_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:应用尚未加载。 追溯(最近一次通话):

这些任务无法异步完成,因为需要将产生的结果显示给用户等待

这并不意味着您不能使用异步队列(芹菜或其他)。 我们有一个非常相似的用例,并且确实使用celery来运行任务。 任务(部分并行,部分串行)将其进度存储在redis中,并且前端轮询以获取当前状态并向用户显示进度,然后当整个过程完成(成功或失败)时,我们显示结果(或错误)。

我同意@bruno desthuillieres提供的解决方案,但是,您可以实现一些套接字解决方案以联系用户。

由于来自用户的轮询可能会对性能产生巨大影响,因此套接字解决方案将非常适合这种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM