【发布时间】:2017-05-16 05:20:38
【问题描述】:
我是 Python 新手,我只是想知道以下是否可以通过 Web2Py 轻松实现。
背景:
我有一个 web 表单,用户可以上传一个 zip 文件,webapp 将处理里面的文件并显示结果。现在一切正常,但是我做 webapp 的方式是单线程的,即 webapp 将解压缩 zip 文件并一个一个处理里面的文件,并在处理所有文件时显示结果。
我使用第三方脚本处理文件,作业完成后不会提示任何内容。它只会在磁盘上创建一个结果文件。
由于每个文件至少需要 2 - 5 分钟来处理,而且我有一个具有 12 个 vCPU 的云服务器,所以我现在这样做的方式非常低效。
目标:
我想让它在多线程中运行,即将所有文件放在一个队列中并并行处理它们。
问题:
假设工作人员的最大数量设置为 12。如果用户上传的文件少于 12 个,那么它应该为每个文件创建一个工作人员并并行处理它们。
我已经使用线程完成了这部分。如果用户想在页面上等待结果(或者用户可以随时回来在他的帐户中查看结果),结果页面将每 5 分钟刷新一次。 webapp 只是在磁盘上检查结果文件是否存在,如果存在则显示它。
我该如何实现:
如果用户上传了超过 12 个文件(例如 30 个文件)。应创建 12 个工作人员,并处理前 12 个文件。每当工作完成处理文件时,将创建一个新的工作人员以从队列中获取文件并进行处理。有没有一种方法,一旦 worker 完成运行脚本,它就会创建一个新的 worker 来运行?
由于我是 Python 新手(实际上是编程新手),因此非常感谢一种实现这一目标的简单方法。谢谢你。
【问题讨论】:
标签: python multithreading python-2.7 queue web2py