You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Binance API订单状态检查模块自动重启实现咨询(Python)

解决方案:合并定时下单与订单状态自动重试检查

核心思路

  1. 保留原定时触发下单逻辑,确保到点执行下单操作
  2. 将订单状态检查封装为独立函数,添加异常捕获与自动重试机制,仅重启检查模块而非整个程序
  3. 下单完成后,循环调用检查函数,直到返回明确的成功状态

完整代码示例

import datetime
import time
import requests
from requests.exceptions import ConnectionError

# 可配置参数
TRIGGER_TIME = "02/05/2023 - 02:50am"  # 下单触发时间
CHECK_INTERVAL = 60  # 订单状态检查间隔(秒)
MAX_RETRY_PER_CHECK = 3  # 单次检查的重试次数

def parse_trigger_time(time_str):
    """解析触发时间字符串为datetime对象"""
    return datetime.datetime.strptime(time_str, "%m/%d/%Y - %I:%M%p")

def place_order():
    """原下单逻辑,替换为你的实际代码"""
    print("执行下单操作...")
    # 示例:response = requests.post("https://your-order-api.com/place")
    return "order_id_123"  # 返回实际生成的订单ID

def check_order_status(order_id):
    """检查订单状态,内置连接错误重试机制"""
    for attempt in range(MAX_RETRY_PER_CHECK):
        try:
            print(f"第{attempt+1}次检查订单状态...")
            # 替换为你的实际状态检查API调用
            response = requests.get(f"https://your-status-api.com/check/{order_id}")
            response.raise_for_status()  # 主动抛出HTTP错误状态码
            status = response.json().get("status")
            
            if status == "success":
                print('SUCCES')
                return True
            elif status == "fail":
                print('FAIL')
                return False
            else:
                # 状态未明确(如处理中),返回None等待下一轮检查
                return None
        except ConnectionError as e:
            print(f"连接错误: {e},剩余{MAX_RETRY_PER_CHECK - attempt - 1}次重试")
            if attempt < MAX_RETRY_PER_CHECK - 1:
                time.sleep(5)  # 重试前短暂等待
        except Exception as e:
            print(f"未知错误: {e}")
            return None
    # 多次重试后仍无法获取有效状态,返回None
    return None

def main():
    # 等待触发时间
    trigger_dt = parse_trigger_time(TRIGGER_TIME)
    now = datetime.datetime.now()
    if trigger_dt <= now:
        print("触发时间已过期,直接执行下单")
    else:
        wait_seconds = (trigger_dt - now).total_seconds()
        print(f"等待{wait_seconds:.0f}秒后执行下单...")
        time.sleep(wait_seconds)
    
    # 执行下单
    order_id = place_order()
    if not order_id:
        print("下单失败,程序退出")
        return
    
    # 循环检查订单状态,直到成功或明确失败
    while True:
        check_result = check_order_status(order_id)
        if check_result is True:
            print("订单处理成功,程序结束")
            break
        elif check_result is False:
            print("订单处理失败,程序结束")
            break
        # 状态未明确或连接错误,等待后重试下一轮检查
        time.sleep(CHECK_INTERVAL)

if __name__ == "__main__":
    main()

关键细节说明

  • 异常隔离处理:针对ConnectionError单独捕获,允许指定次数的重试,避免单次连接中断导致整个程序崩溃
  • 模块独立运行:订单检查逻辑封装为独立函数,失败时仅重启该函数的执行流程,不会重置已完成的定时等待和下单操作
  • 灵活配置:将触发时间、检查间隔、重试次数设为顶部变量,可根据实际业务需求快速调整
  • 状态明确判断:区分成功、失败、未明确三种状态,仅在获取到明确结果时终止程序,其他情况持续轮询检查

极端场景优化(可选)

如果目标API长期不稳定,可在重试逻辑中添加指数退避策略,避免频繁请求触发服务器限流:

# 修改check_order_status中的重试等待逻辑
time.sleep(5 * (2 ** attempt))  # 每次重试等待时间翻倍

内容的提问来源于stack exchange,提问作者exneed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:55:26