gpt4 book ai didi

python - 使用 django 和 bokeh 绘制实时数据的正确方法

转载 作者:太空狗 更新时间:2023-10-29 17:19:39 26 4
gpt4 key购买 nike

我在 Django 应用程序中嵌入了 Bokeh 图。我在 django View 中创建绘图并将绘图推送到 Bokeh 服务器以在我的网页中显示绘图。

#view.py
def view_plot(request):
f=figure()
f.plot(#some data#)
session = push_session(curdoc())
context = {'script': autoload_server(f, session_id=session.id)}
return render_to_response('plot.html', context=context)

一切都很好。现在我想做一个实时绘图,每次创建新的 DB-Entry 时都应该更新绘图。我不确定什么是最好的方法。

在网页上使用计时器请求当前数据是一种好习惯吗?

或者有没有办法从服务器推送更新,以便每个当前连接的客户端都能获得剧情更新?

如果有任何提示,我将不胜感激。

非常感谢。

最佳答案

基本上,您的问题是浏览器使用请求-响应模式:它们发送请求,然后立即得到答复。您有两个选择,定期轮询服务器或某种通知系统。

通知可以是 long-polling, i.e. client makes a request and server doesn't respond until there's data, or through websockets or through HTML5 server-side events .

现在,问题是这些通知系统与传统的 Django 部署集成得不太好,因为它们会导致打开的套接字和相应的挂起线程。因此,如果您的网络服务器有 10 个 Django 线程,一个带有 10 个选项卡的浏览器就可以占用所有线程。

改变这种状况的工作正在进行中,但与此同时,除非您有严格的实时要求或有大量客户端,否则只需设置一个计时器并每隔 x 秒轮询一次,其中 x 取决于可接受的延迟时间。根据您的数据的存储方式,我可能会采用一种简单的机制,这样服务器就不会每次都发送整个数据集,而只会发送新数据或未进行任何更改的返回码。

例如,在第一个请求中,服务器可能会在响应中放入时间戳或序列号,然后客户端会询问自该时间戳/序列号以来的任何更改。

通知系统以更低的开销为您提供更好的延迟,但它可能也将更难以部署,如果这只是一个供内部使用的应用程序,则可能会过大。即使使用通知系统,您也需要进行一些仔细的协议(protocol)设计,以确保不会遗漏任何内容。

关于python - 使用 django 和 bokeh 绘制实时数据的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36828483/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com