gitdeem commited on
Commit
2ede604
·
verified ·
1 Parent(s): b00b1a2

Upload 2 files

Browse files
Files changed (2) hide show
  1. Dockerfile +1 -1
  2. web_server.py +16 -43
Dockerfile CHANGED
@@ -31,4 +31,4 @@ EXPOSE 8888
31
  RUN chmod 777 /app
32
 
33
  # 使用gunicorn启动应用
34
- CMD ["gunicorn", "--bind", "0.0.0.0:8888", "--workers", "4", "web_server:app"]
 
31
  RUN chmod 777 /app
32
 
33
  # 使用gunicorn启动应用
34
+ CMD ["gunicorn", "--timeout", "120", "--bind", "0.0.0.0:8888", "--workers", "4", "web_server:app"]
web_server.py CHANGED
@@ -799,9 +799,6 @@ def get_stock_data():
799
  if not stock_code:
800
  return custom_jsonify({'error': '请提供股票代码'}), 400
801
 
802
- # 记录详细的请求参数
803
- app.logger.info(f"请求参数: stock_code={stock_code}, market_type={market_type}, period={period}")
804
-
805
  # 根据period计算start_date
806
  end_date = datetime.now().strftime('%Y%m%d')
807
  if period == '1m':
@@ -816,71 +813,47 @@ def get_stock_data():
816
  start_date = (datetime.now() - timedelta(days=365)).strftime('%Y%m%d')
817
 
818
  # 获取股票历史数据
819
- app.logger.info(f"获取股票 {stock_code} 的历史数据,市场: {market_type}, 起始日期: {start_date}, 结束日期: {end_date}")
820
- try:
821
- df = analyzer.get_stock_data(stock_code, market_type, start_date, end_date)
822
- app.logger.info(f"成功获取股票数据,行数: {len(df) if df is not None and not df.empty else 0}")
823
- except Exception as e:
824
- app.logger.error(f"获取股票数据时出错: {str(e)}")
825
- app.logger.error(traceback.format_exc())
826
- return custom_jsonify({'error': f'获取股票数据失败: {str(e)}'}), 500
827
 
828
  # 检查数据是否为空
829
- if df is None or df.empty:
830
  app.logger.warning(f"股票 {stock_code} 的数据为空")
831
  return custom_jsonify({'error': '未找到股票数据'}), 404
832
 
833
- # 计算技术指标
834
- app.logger.info(f"计算股票 {stock_code} 的技术指标")
835
- try:
836
- df = analyzer.calculate_indicators(df)
837
- app.logger.info(f"成功计算技术指标")
838
- except Exception as e:
839
- app.logger.error(f"计算技术指标时出错: {str(e)}")
840
- app.logger.error(traceback.format_exc())
841
- return custom_jsonify({'error': f'计算技术指标失败: {str(e)}'}), 500
842
-
843
  # 将DataFrame转为JSON格式
844
  app.logger.info(f"将数据转换为JSON格式,行数: {len(df)}")
845
 
846
  # 确保日期列是字符串格式 - 修复缓存问题
847
  if 'date' in df.columns:
848
  try:
849
- df = df.copy() # 创建副本避免SettingWithCopyWarning
850
  if pd.api.types.is_datetime64_any_dtype(df['date']):
851
  df['date'] = df['date'].dt.strftime('%Y-%m-%d')
852
  else:
 
853
  df['date'] = pd.to_datetime(df['date'], errors='coerce')
854
  df['date'] = df['date'].dt.strftime('%Y-%m-%d')
855
- app.logger.info("日期列处理成功")
856
  except Exception as e:
857
  app.logger.error(f"处理日期列时出错: {str(e)}")
858
- app.logger.error(traceback.format_exc())
859
- # 尝试简单转换为字符串
860
  df['date'] = df['date'].astype(str)
861
 
862
  # 将NaN值替换为None
863
- try:
864
- df = df.replace({np.nan: None, np.inf: None, -np.inf: None})
865
- # 确保所有数值都是JSON可序列化的
866
- for col in df.select_dtypes(include=['float64']).columns:
867
- df[col] = df[col].astype(float)
868
- except Exception as e:
869
- app.logger.error(f"处理NaN值时出错: {str(e)}")
870
- app.logger.error(traceback.format_exc())
871
 
872
- try:
873
- records = df.to_dict('records')
874
- app.logger.info(f"数据处理完成,返回 {len(records)} 条记录")
875
- return custom_jsonify({'data': records})
876
- except Exception as e:
877
- app.logger.error(f"转换为JSON时出错: {str(e)}")
878
- app.logger.error(traceback.format_exc())
879
- return custom_jsonify({'error': f'数据格式转换失败: {str(e)}'}), 500
880
  except Exception as e:
881
  app.logger.error(f"获取股票数据时出错: {str(e)}")
882
  app.logger.error(traceback.format_exc())
883
- return custom_jsonify({'error': f'服务器内部错误: {str(e)}'}), 500
 
884
 
885
  # @app.route('/api/market_scan', methods=['POST'])
886
  # def api_market_scan():
 
799
  if not stock_code:
800
  return custom_jsonify({'error': '请提供股票代码'}), 400
801
 
 
 
 
802
  # 根据period计算start_date
803
  end_date = datetime.now().strftime('%Y%m%d')
804
  if period == '1m':
 
813
  start_date = (datetime.now() - timedelta(days=365)).strftime('%Y%m%d')
814
 
815
  # 获取股票历史数据
816
+ app.logger.info(
817
+ f"获取股票 {stock_code} 的历史数据,市场: {market_type}, 起始日期: {start_date}, 结束日期: {end_date}")
818
+ df = analyzer.get_stock_data(stock_code, market_type, start_date, end_date)
819
+
820
+ # 计算技术指标
821
+ app.logger.info(f"计算股票 {stock_code} 的技术指标")
822
+ df = analyzer.calculate_indicators(df)
 
823
 
824
  # 检查数据是否为空
825
+ if df.empty:
826
  app.logger.warning(f"股票 {stock_code} 的数据为空")
827
  return custom_jsonify({'error': '未找到股票数据'}), 404
828
 
 
 
 
 
 
 
 
 
 
 
829
  # 将DataFrame转为JSON格式
830
  app.logger.info(f"将数据转换为JSON格式,行数: {len(df)}")
831
 
832
  # 确保日期列是字符串格式 - 修复缓存问题
833
  if 'date' in df.columns:
834
  try:
 
835
  if pd.api.types.is_datetime64_any_dtype(df['date']):
836
  df['date'] = df['date'].dt.strftime('%Y-%m-%d')
837
  else:
838
+ df = df.copy()
839
  df['date'] = pd.to_datetime(df['date'], errors='coerce')
840
  df['date'] = df['date'].dt.strftime('%Y-%m-%d')
 
841
  except Exception as e:
842
  app.logger.error(f"处理日期列时出错: {str(e)}")
 
 
843
  df['date'] = df['date'].astype(str)
844
 
845
  # 将NaN值替换为None
846
+ df = df.replace({np.nan: None, np.inf: None, -np.inf: None})
 
 
 
 
 
 
 
847
 
848
+ records = df.to_dict('records')
849
+
850
+ app.logger.info(f"数据处理完成,返回 {len(records)} 条记录")
851
+ return custom_jsonify({'data': records})
 
 
 
 
852
  except Exception as e:
853
  app.logger.error(f"获取股票数据时出错: {str(e)}")
854
  app.logger.error(traceback.format_exc())
855
+ return custom_jsonify({'error': str(e)}), 500
856
+
857
 
858
  # @app.route('/api/market_scan', methods=['POST'])
859
  # def api_market_scan():