为啥我不能在函数中使用 websocket

Posted

技术标签:

【中文标题】为啥我不能在函数中使用 websocket【英文标题】:Why can't I use websocket in a function为什么我不能在函数中使用 websocket 【发布时间】:2021-11-26 08:26:46 【问题描述】:

当我尝试像这样使用 websocket 时

ws = websocket.WebSocketApp(f"wss://fstream.binance.com/ws/symbol@aggTrade",on_message=on_message,on_close=on_close)
ws.run_forever()

它工作正常,但出于某种原因我想像这样使用它

def func(symbol):
    ws = websocket.WebSocketApp(f"wss://fstream.binance.com/ws/symbol@aggTrade",on_message=on_message,on_close=on_close)
    ws.run_forever()
func("btcusdt")

但它不起作用为什么我不能在 func 中使用 websocket 我该怎么做

【问题讨论】:

“它不起作用”对您的问题的描述不够清楚。请更具体。 它实际上什么都不做,就像我什至没有调用函数只是等待@ThierryLathuille 【参考方案1】:

这(由于 SSL 问题对 OP 的代码进行了微小的更改)在 Python 3.9.9 上完美运行

import websocket
import ssl


def on_msg(_, msg):
    print(msg)


def on_err(_, err):
    print(err)


def func(symbol):
    ws = websocket.WebSocketApp(
        f"wss://fstream.binance.com/ws/symbol@aggTrade", on_message=on_msg, on_error=on_err)
    ws.run_forever(sslopt="cert_reqs": ssl.CERT_NONE)


if __name__ == '__main__':
    func('btcusdt')

【讨论】:

如果您可以添加解释为什么在函数中运行 OP 的代码而不是在顶层运行 OP 的代码,您的答案可能会更有价值。 这不是必要的。我的回答仅仅证明了我使用的 Python 版本确实有效,而在函数中运行 WebSocketApp 时 OP 似乎有问题 首先让我纠正一些问题,我的问题是缺少 websocket 可以在它正在工作的函数中使用,我不明白第一件事是当我在 on_message func 中放置一个计时器时当 websocket 代码不在函数中时它可以工作,但是当我尝试使用 websocket 代码在函数中时它根本不工作@DarkKnight @WebsocketUser 也许你应该发布你的代码的代表性示例工作 我自己解决了我的问题,感谢您的所有帮助

以上是关于为啥我不能在函数中使用 websocket的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能在函数中使用 websocket

为啥我不能在 C# 中使用基本构造函数 [重复]

为啥我不能使用 onClick 在 jQuery $(document).ready 函数中执行函数?

为啥我不能使用 folium.Map() 函数在地图中标记值列表?

为啥我不能在其他类或函数中使用我的 Propel ORM 类?

为啥不能在函数参数列表中使用 alloca?