Linux下nohup运行IG Markets流式API Python脚本失败问题排查
问题排查与解决方案
一、脚本本身的致命错误(直接导致nohup运行失败)
- 依赖库未导入:代码中使用
pd.read_csv、pd.DataFrame等pandas操作,但未添加import pandas as pd语句,运行时会抛出NameError: name 'pd' is not defined异常,直接终止程序。 - 语法错误:
on_prices_update函数内的print("xxxxxxxx缺少闭合引号和右括号,语法不合法。on_charts_update函数内的print(xxxxxx"\存在引号不匹配、缺少左括号的语法错误,脚本无法正常解析执行。
- 交互式阻塞语句:脚本末尾的
input("{0:-^80}\n".format(...))是交互式命令,nohup运行时进程脱离终端,stdin被关闭,执行到此处会抛出EOFError,导致进程直接退出。 - 回调线程被阻塞:
on_charts_update中的time.sleep(60)会阻塞Lightstreamer的事件监听线程,无法及时处理后续广播信号,甚至触发服务器超时断开连接,进程可能因此终止。
二、nohup运行的优化建议
即使修复脚本错误,也要确保nohup的正确使用:
- 显式重定向输出:避免因默认输出文件权限或IO问题导致进程异常,建议运行时指定日志文件:
其中nohup python marketdata.py > marketdata.log 2>&1 &2>&1将错误输出合并到标准输出,统一写入日志,方便后续排查问题。 - 进程状态管理:用
&将进程放入后台后,可通过ps aux | grep marketdata.py查看进程状态,用kill <进程PID>终止进程。
三、脚本修复要点
- 添加pandas导入:在import区域补充
import pandas as pd - 修复所有语法错误:
- 若不需要
on_prices_update函数可直接删除;如需保留,修正print语句:def on_prices_update(item_update): print("price: %s " % item_update) - 修正
on_charts_update中的字符串格式,确保引号匹配、语法正确,示例:def on_charts_update(item_update): print("Stock: {stock_name}, UTM: {UTM}, BID_CLOSE: {BID_CLOSE}".format( stock_name=item_update["name"], **item_update["values"] )) res_ = ["{UTM} {stock_name} {BID_CLOSE}".format( stock_name=item_update["name"], **item_update["values"] ).split(' ')]
- 若不需要
- 替换交互式输入:移除
input(...)语句,改用无限循环保持主线程运行(Lightstreamer监听为异步,需主线程不退出):# 替换原input语句 try: while True: time.sleep(3600) # 每小时空循环一次,避免主线程退出 except KeyboardInterrupt: ig_stream_service.disconnect() - 移除回调中的sleep:删除
on_charts_update内的time.sleep(60),避免阻塞监听线程,如需控制数据写入间隔,可在主线程通过定时器实现。
内容的提问来源于stack exchange,提问作者Kiann
相关产品推荐
相关产品推荐

