我想用 django 做一个接口,接到 start 请求后,就执行一个 python 脚本,同时可以将输出或日志返还给前端,接到 stop 请求就 kill 脚本,这样如何写比较合理呢? 用 celery 写了一下,但是无法结束进程,不知道原因,也搞不定日志。。。
1
baoyinhe 2023-05-09 18:48:43 +08:00
输出存 redis 或数据库,kill 脚本可以看一下这个 base64 aHR0cHM6Ly9qdWVqaW4uY24vcG9zdC83MTE5Njc4MjQ0ODU2NjkyNzcz
|
2
Lucups 2023-05-09 18:55:36 +08:00
建议使用 websocket
或者考虑一下 xterm.js |
3
37Y37 2023-05-09 19:39:34 +08:00 via Android
|
4
yinmin 2023-05-09 23:51:52 +08:00
如果并发量不大的话,可以直接 ajax 使用 stream 流,log 信息通过 yield 返回
服务器端代码: from django.http import StreamingHttpResponse import time def stream_response(request): def data(): for i in range(10): time.sleep(1) try: yield f"data: {i}\n\n" except GeneratorExit: # 在这里执行清理操作,例如关闭数据库连接或释放其他资源 print("Client closed the connection.") raise response = StreamingHttpResponse(data()) response['Content-Type'] = 'text/event-stream' return response 浏览器端 javascript 代码: //调用上面这段服务器 stream_response ,日志显示在 data_container 的<div>里,stop_btn 是一个 button 按钮 var source = new EventSource("{% url 'stream_response' %}"); var container = document.getElementById('data_container'); source.onmessage = function(event) { container.innerHTML += event.data + "<br>"; }; var stop_btn = document.getElementById('stop_btn'); stop_btn.onclick = function() { source.close(); }; 大致思路如上,代码没仔细调试过,你自己具体研究。 |
5
noparking188 2023-05-10 11:33:02 +08:00
supervisor 呢
|