您现在的位置是:探索 >>正文
python发送数据到web页
探索96人已围观
简介我有个朋友做量化交易,每天盯盘盯到眼睛发酸。他最大的痛点不是策略失效,而是想把Python算出来的实时信号推送到手机上的网页看板。他试过用邮件,延迟太高;用微信机器人,接口不稳定。最后我丢给他一段二十 ...
我有个朋友做量化交易,发送每天盯盘盯到眼睛发酸。数据他最大的发送痛点不是策略失效,而是数据想把Python算出来的实时信号推送到手机上的网页看板。他试过用邮件,发送延迟太高;用微信机器人,数据接口不稳定。发送最后我丢给他一段二十行的数据代码,问题就解决了——用Python内置的发送HTTP服务器往网页推数据。
别想复杂了。数据不需要Flask,发送不需要Django,数据连第三方库都不用装。发送Python标准库里的数据http.server模块就能干这事。核心逻辑就一句话:把网页当文件一样写出去,发送只不过这个文件是动态生成的。
from http.server import BaseHTTPRequestHandler, HTTPServer import json data_store = { "price": 0, "volume": 0} class Handler(BaseHTTPRequestHandler): def do_GET(self): if self.path == '/data': self.send_response(200) self.send_header('Content-Type', 'application/json') self.end_headers() self.wfile.write(json.dumps(data_store).encode()) else: self.send_response(200) self.send_header('Content-Type', 'text/html') self.end_headers() html = '''<html><body> <h1>实时价格</h1> <div id="price">--</div> <script> setInterval(() => { fetch('/data').then(r => r.json()).then(d => { document.getElementById('price').innerText = d.price; }); }, 1000); </script> </body></html>''' self.wfile.write(html.encode()) if __name__ == '__main__': server = HTTPServer(('0.0.0.0', 8000), Handler) print('服务器跑起来了,访问 http://localhost:8000') server.serve_forever() 这段代码干了三件事:启动一个监听8000端口的服务器,网页请求根路径时返回一个带JavaScript的HTML页面,网页里的JS每秒去请求一次/data接口拿最新数据。你的交易策略只需要更新那个data_store字典就行。
我实际用的时候踩过一个坑——浏览器缓存。第一次改完代码刷新页面,看到的是旧数据,气得差点砸键盘。后来发现是浏览器把HTML页面缓存了,加个Cache-Control: no-store响应头就好。这种小问题不遇到一次根本记不住。
还有并发问题。如果策略脚本是多线程的,直接改data_store可能造成数据错乱。我当时的做法是给字典加个锁,或者干脆用queue.Queue,生产者往里放数据,HTTP处理器从队列里取最新一条。简单粗暴但有效。
这套方案能撑多大流量?别指望它扛住高并发。我自己测过,本地跑五个浏览器标签页同时刷新,CPU占用率不到5%。但你要是开一百个连接,Python单线程服务器就开始卡了。够用就好,别贪心。
说实话,用这种原始方式做数据推送,最大的好处是可控。没有框架的黑魔法,所有逻辑摊在眼前,出了bug一眼就能定位。我甚至见过有人用这个思路做家庭监控面板,把树莓派上采集的温湿度数据推给手机看。那个老哥还加了Basic Auth认证,虽然代码丑了点,但实用啊。
数据推送的方向反一反也成立。你在网页上点个按钮,Python这边收到POST请求就执行某个函数。比如远程开机、定时任务触发,都是同样的路子。只要把do_GET换成do_POST,再解析一下请求体就行。
最后提醒一句,这个方案只适合内网或者个人使用。真要部署到公网,还是得用Nginx转发加SSL证书。不过话说回来,如果只是自己调试用,Python这二十行代码比任何重型框架都来得痛快。写代码有时候就是这样,绕开那些花哨的工具,回归最底层的HTTP协议,反而更接近问题的本质。
Tags:
相关文章
特种渗透电影下载
探索特种渗透电影的下载渠道一直是个灰色地带。我认识一个老影迷,硬盘里存着三百多部这类片子,从《黑鹰坠落》到《幽灵行动》,全是高清资源。他告诉我,真正稀缺的不是电影本身,而是那些带军事顾问注释的版本——比如 ...
【探索】
阅读更多phpcms设定时间数据增加
探索phpcms后台的时间控件,默认只输出当前时间。但做数据迁移或者内容定时发布时,你往往需要手动把发布时间改成过去某个节点,或者未来某个时刻。直接改数据库?太粗暴,而且容易连带出缓存问题。我试过好几次 ...
【探索】
阅读更多系统漏洞被黑客入侵属于什么问题
探索2017年5月12日,英国一家医院的IT管理员发现,所有电脑屏幕都变成了红色勒索信,要求支付300美元比特币才能解锁文件。同一时间,全球150个国家的30万台电脑中招,包括中国高校、俄罗斯内政部、联邦 ...
【探索】
阅读更多