我有一个简单的观点:
def test(request):
os.system('fab remote_uname -i /path/to/keyfile -H hostname')
return HttpResposnse('Complete')
在fabfile.py
中:
from fabric.api import *
env.user='ubuntu'
def remote_uname():
run('uname -a')
当我点击url时,它会等待很长时间来传递响应。这可能会混淆用户再次点击刷新执行remote_uname()
。如何传递视图并让操作稍后完成?
在这种情况下,如何实现并发性?你知道吗
对于简单的情况,您可以使用线程,但是您必须在交付视图之后处理失败。这可能有点棘手,你对返回值感兴趣吗?你知道吗
线程/进程并发可能需要抛出
您有几个选项,比如线程/进程级别的并发性,例如使用Python的^{} 模块。但走这条路,我担心你可能会暴露出比你的硬件所能处理的更多的线程/进程,除非你限制你的Django视图或其他限制速度的东西。你知道吗
它完成了任务,非常简单,您的视图将立即返回,但您可能会面临过载的风险,您需要手动管理结果和错误。你知道吗
任务队列
否则,您可以将其实现为队列任务,如Celery*例如。, 它将对任务进行排队,逐个或按您设置的并发级别运行它们。另一个优点是在成功的情况下会产生结果,并且会记录失败,因此如果您愿意,可以将它们返回给用户。你知道吗
*像芹菜这样的任务队列在设置时可能看起来很复杂,但事实并非如此,而且在Django内部也有可靠的支持。
相关问题 更多 >
编程相关推荐