我有我的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运行它。这是我目前的状态,但我只想做一次,所以我解释了。有什么建议吗?
答案 0 :(得分:1)
更新映像的过程必须异步运行,与Django视图无关。您的Django视图只能返回最新的图像并返回,如果它还没有运行,可能会启动异步任务。
为此使用Celery是很常见的。
答案 1 :(得分:0)
不可能那样做。 HTTP只是不起作用。您的Django视图必须一次返回一个快照。在您的前端添加javascript代码以向Django发送请求以获取新快照。当然每秒20次太多了。看起来您需要将相机输出流式传输到浏览器,而不是每秒使用Django创建20个快照;)