回调函数不打印,除非由 Jupyter 运行
Posted
技术标签:
【中文标题】回调函数不打印,除非由 Jupyter 运行【英文标题】:callback function doesn't print, unless ran by Jupyter 【发布时间】:2022-01-24 02:50:39 【问题描述】:这是重现问题所需的最少代码。
我调用一个带有回调函数的 API,该函数打印出 API 调用的结果。
如果我在 Jupyter 中运行此代码,我会得到输出。如果我用python file.py
运行它,我不会得到任何输出。我已经检查了 API 的代码,但这并没有什么奇怪的。将DEBUGGING
设置为True
也无济于事。
注意有一次依赖; Bitvavo API。使用pip install python-bitvavo-api
安装它
# %%
from python_bitvavo_api.bitvavo import Bitvavo
# %%
def generic_callback(response):
print(f"log function=get_markets, response=")
bitvavo = Bitvavo("DEBUGGING": False)
websocket = bitvavo.newWebsocket()
# %%
websocket.markets(options="market": "BTC-EUR", callback=generic_callback)
这是我从 Jupyter 得到的预期输出:
log function:get_markets, response='market': 'BTC-EUR', 'status': 'trading', 'base': 'BTC', 'quote': 'EUR', 'pricePrecision': 5, 'minOrderInBaseAsset': '0.0001', 'minOrderInQuoteAsset': '5', 'orderTypes': ['market', 'limit', 'stopLoss', 'stopLossLimit', 'takeProfit', 'takeProfitLimit']
【问题讨论】:
【参考方案1】:因为你使用的是websocket,所以回调是由不同的线程执行的,这意味着如果你不等待,主线程(即接收print
的输出)将已经被杀死.
在末尾添加sleep(1)
(这是秒,而不是毫秒),输出将显示。
PS:Jupyter 确实显示输出的原因是因为 Jupyter 始终保持交互式窗口打开,即使在您运行代码很久之后 :)
【讨论】:
【参考方案2】:import time
from python_bitvavo_api.bitvavo import Bitvavo
# %%
def generic_callback(response):
print(f"log function=get_markets, response=")
bitvavo = Bitvavo("DEBUGGING": False)
websocket = bitvavo.newWebsocket()
# Wait N.1 required to receive output, otherwise the main thread is killed
time.sleep(1)
# %%
websocket.markets(options="market": "BTC-EUR", callback=generic_callback)
# Wait N.2 required to receive output, otherwise the main thread is killed
time.sleep(1)
【讨论】:
@NostraDavid 如果我或其他用户的回答是您问题的解决方案,请接受 *** 帮助中心规则的回答,谢谢以上是关于回调函数不打印,除非由 Jupyter 运行的主要内容,如果未能解决你的问题,请参考以下文章