提问人:Lokesh Giri 提问时间:6/22/2023 最后编辑:Lokesh Giri 更新时间:6/27/2023 访问量:98
Python 代码卡住了,甚至 CTRL+C 也无济于事
Python Code gets stuck, not even the CTRL+C helps to exit
问:
我已经编写了代码来使用 Websockets 接收实时市场数据,我从主循环中分析数据(迭代之间的休眠时间为 0.1 秒)并根据当前市场水平做出交易决策,在主循环中我还每 10 秒左右打印一次统计数据。整个代码在 0.001 秒内执行(除了在极少数情况下),因此每个循环大约需要 0.101 秒(认为这些数字可能会有所帮助)。代码每天运行 375 分钟,我主要使用 Visual Code Studio 在 Windows 10 64 位上编写/编辑和运行代码。
我面临的问题是执行有时会冻结,代码不打印更新,根本不执行任何内容,陷入昏迷。即使按 CTRL+C,我也无法摆脱它。如果问题是因为命令在永恒循环中丢失在代码的某个角落,我们应该能够通过按 CTRL+C 退出它,对吧?起初我以为这是Visual Studio Code的问题,当我尝试通过IDLE运行代码时也会发生同样的情况
似乎是一些基本的 Python 问题,知识渊博的编码人员可能能够查明,请帮我找到错误。提前致谢
我尝试了一些步骤来加速 Visual studio Code,卸载了我不需要的扩展。但这看起来不像 VSC 问题。我没有想法了
编辑:
我了解到,问题很可能是由于对经纪人的 http 请求没有返回确认而发生的(经纪人确认订单将处于永恒等待状态,既没有拒绝也没有完成)
所以下面是示例代码的样子:
import time
import api
is_in_position=0
def isExit():
# If exit is necessary return 1 else return 0
def createPosition():
try:
result=api.placeOrder('qty'=100, 'action'='buy')
if result['status']=='OK':
is_in_position=1
except:
print("An Exception has happened (1)")
def checkPositionsForChanges():
# Check Positions, exit if the move is against you
is_exit=isExit()
if is_exit:
try:
result=api.placeOrder('qty'=100, 'action'='sell')
if result['status']=='OK':
is_in_position=2
except:
print("An Exception has happened (2)")
# THE MAIN WHILE LOOP
while True:
if is_in_position==0:
createPosition()
is_in_position=1
elif is_in_position==1:
checkPositionsForChange()
elif is_in_position==2:
break
time.sleep(1)
问题来自
result=api.placeOrder('qty'=100, 'action'='buy')
api.placeOrder 是一个代理 SDK 函数,它不会抛出任何异常,甚至没有超时错误,我无法控制它。
我该如何解决它,以便经纪人的不响应不会让我停滞不前
答:
正如你提到的,你的问题似乎是代码正在进入一个无法退出的循环。Ctrl+C 命令在当前命令完成后立即执行,但如果此命令是一个非常大的计算(或可能超时的 API 调用),则它不起作用,您需要强制停止执行 VSCode。
不看代码,很难找到确切的问题,但我可能会在收到您的股票数据时尝试添加超时。
希望这有帮助!
评论
KeyboardInterrupt