渲染django后运行代码

时间:2014-08-07 22:25:40

标签: python django multithreading

我有我的Raspberry Pi相机。 这就像一个安全凸轮,所以我想加载前端,然后从服务器端开始每秒20次更新图像,并在客户端每20秒刷新一次图像标记。问题是服务器端循环是无限的(除非你暂停它)所以页面永远不会呈现。我想渲染前端,关闭连接,然后完成剩下的工作。我试过线程,但没有按预期工作。

from django.shortcuts import render
import camera
import time
from threading import Thread

class Preview(Thread):
    def __init__(self):
        Thread.__init__(self)
    def run(self):
        camera.module.preview()

class Render(Thread):
    def __init__(self, request):
        Thread.__init__(self)
        self.request = request
    def run(self):
        return render(self.request, "dashboard/home.html")

def home(request):
    preview=Preview(); preview.setName("Previewer");
    render = Render(request); render.setName("Renderer");
    render.start(); render.join();
    time.sleep(1)
    preview.start(); preview.join();

我知道我可以有另一个脚本并通过ajax运行它。这是我目前的状态,但我只想做一次,所以我解释了。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

更新映像的过程必须异步运行,与Django视图无关。您的Django视图只能返回最新的图像并返回,如果它还没有运行,可能会启动异步任务。

为此使用Celery是很常见的。

答案 1 :(得分:0)

不可能那样做。 HTTP只是不起作用。您的Django视图必须一次返回一个快照。在您的前端添加javascript代码以向Django发送请求以获取新快照。当然每秒20次太多了。看起来您需要将相机输出流式传输到浏览器,而不是每秒使用Django创建20个快照;)