Binance API订单状态检查模块自动重启实现咨询(Python)
解决方案:合并定时下单与订单状态自动重试检查
核心思路
- 保留原定时触发下单逻辑,确保到点执行下单操作
- 将订单状态检查封装为独立函数,添加异常捕获与自动重试机制,仅重启检查模块而非整个程序
- 下单完成后,循环调用检查函数,直到返回明确的成功状态
完整代码示例
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
相关产品推荐
相关产品推荐

