ソースを参照

中控测试完毕,但exit逻辑还有点问题(生产者发送)。

skyfffire 2 年 前
コミット
cb4d975f67
2 ファイル変更8 行追加4 行削除
  1. 5 1
      src/main.rs
  2. 3 3
      src/server.rs

+ 5 - 1
src/main.rs

@@ -27,7 +27,7 @@ async fn main() {
     // quant初始化动作
     let quant_arc = quant_libs::init(params, running.clone()).await;
     // 初始化中控服务
-    server::run_server(6000, running.clone(), quant_arc.clone());
+    server::run_server(5656, running.clone(), quant_arc.clone());
 
     // 每一秒检查一次程序是否结束
     while running.load(Ordering::Relaxed) {
@@ -35,6 +35,10 @@ async fn main() {
     }
 
     info!("检测到退出信号!等待10s,等待其他线程后续处理完毕(再次按control c可以立马结束)……");
+    tokio::spawn(async move {
+        let mut quant = quant_arc.lock().await;
+        quant.exit(0).await;
+    });
     let mut i = 10;
     while i > 0 {
         tokio::time::sleep(Duration::from_secs(1)).await;

+ 3 - 3
src/server.rs

@@ -1,6 +1,6 @@
 use std::ops::Div;
 use std::sync::Arc;
-use std::sync::atomic::AtomicBool;
+use std::sync::atomic::{AtomicBool, Ordering};
 use serde::{Deserialize, Serialize};
 use strategy::quant::Quant;
 use actix_web::{web, App, HttpResponse, HttpServer, Responder, post, get};
@@ -73,11 +73,11 @@ async fn get_account(arcs: web::Data<Arcs>) -> impl Responder {
 // 句柄 POST 请求
 #[post("/exit")]
 async fn on_change(arcs: web::Data<Arcs>, input: web::Json<InputData>) -> impl Responder {
-    let mut quant = arcs.quant_arc.lock().await;
     debug!(?input);
 
     if input.stop {
-        HttpResponse::Ok().body(format!("程序已收到退出信号,将在10秒后退出。"))
+        arcs.running.store(false, Ordering::Relaxed);
+        HttpResponse::Ok().body(format!("程序已收到退出信号,将在10秒内退出。"))
     } else {
         HttpResponse::ServiceUnavailable().body(format!("程序没有收到正确的信号:{:?}。", input))
     }