首页 > 解决方案 > Python多线程数据共享

问题描述

在设计一个简单的多线程程序时,我需要一些建议。我对线程有基本的了解,但我对在线程和对象范围之间共享数据感到困惑。

我的t1线程正在侦听 websocket 以获取消息,并且每次收到消息时,process_message都会调用该函数。我想在函数中(而不是打印)发生的是调用portfolio.update_coin_pos(a, b). 但是考虑到函数的定义位置,我无权访问该portfolio对象。我有两种解决方案,但对我来说都不是很好:

  1. 我可以process_messagemain函数中定义,但这让我觉得非常难看。
  2. process_message函数作为方法附加到Portfolio. 但对我来说,这似乎混合了不应该混合的东西。 Portfolio跟踪我的位置,而不是解码进来的消息。

为了清楚起见,我省略了一些代码。

class Portfolio:
    # other stuff

    def update_coin_pos(self, symbol, qty):
        self.positions[symbol] = qty

def process_message(msg):
    a = msg['e']
    b = msg['E']

    print(a, b)

def main()
    client = Client()
    portfolio = Portfolio()

    bm = BinanceSocketManager(client)
    bm.start_user_socket(process_message)

    t1 = Thread(target=bm.start, daemon = True)
    t1.set_daemon(True)
    t1.start()

    while True:
        # do stuff like print things to screen
        sleep(10)

标签: pythonmultithreadingbinance

解决方案


推荐阅读