【问题标题】:Django: running a few tasks in parallelDjango:并行运行几个任务
【发布时间】:2018-10-28 13:06:54
【问题描述】:

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

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

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

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

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

谢谢

得到错误

这是我们得到的错误Traceback(最近一次调用最后一次): C:\Users\idea\AppData\Local\Enthought\Canopy\edm\envs\python\lib\multiprocessing\spawn.py”,第 106 行,在 spawn_main 退出代码 = _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 导入文件 文件“G:\work\gitrepo\suprath-github\smartdata\ssd\FinalPlots\uploads\core\models.py”,第 7 行,在 类文档(模型。模型): 文件“C:\Users\idea\AppData\Local\Enthought\Canopy\edm\envs\python\lib\site-packages\django\db\models\base.py”,第 100 行,在 new强> app_config = apps.get_ contains_app_config(模块) 文件“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 raise AppRegistryNotReady("应用尚未加载。") django.core.exceptions.AppRegistryNotReady:应用程序尚未加载。 Traceback(最近一次调用最后一次):

【问题讨论】:

  • 您的问题缺少任何类型的信息。您说您收到错误,但您没有提供任何回溯或任何代码来重现问题,因此我们无法告诉您是否可以通过对原始解决方案进行细微调整来解决问题。你没有说这些任务需要多少。如果它们以分钟为单位,那么异步请求是必须的。一次:浏览器或网络服务器可能会关闭持续这么长时间的连接,或者可能存在网络问题。您可以提交用户要做的工作,并为用户提供查看结果的链接。
  • 请提供代码示例和您遇到的错误。我过去在 Django 中成功地使用了线程和多进程,所以如果代码编写正确 - 这里应该也是可能的。

标签: python django python-multiprocessing


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 感谢布鲁诺会尝试一下
    猜你喜欢
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    相关资源
    最近更新 更多