python - Python多线程数据共享
问题描述
在设计一个简单的多线程程序时,我需要一些建议。我对线程有基本的了解,但我对在线程和对象范围之间共享数据感到困惑。
我的t1
线程正在侦听 websocket 以获取消息,并且每次收到消息时,process_message
都会调用该函数。我想在函数中(而不是打印)发生的是调用portfolio.update_coin_pos(a, b)
. 但是考虑到函数的定义位置,我无权访问该portfolio
对象。我有两种解决方案,但对我来说都不是很好:
- 我可以
process_message
在main
函数中定义,但这让我觉得非常难看。 - 将
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)
解决方案
推荐阅读
- python - Python随机频率
- strapi - 如何从 MongoDB 中的 URL 填充 Strapi 中的图像?
- javascript - 滚动行为是否来自 jquery?
- javascript - 使用 pdf.js 以高质量呈现 pdf
- javascript - 压缩母版页 Adobe Forms SAP 中隐藏字段的空间
- mysql - 如何在mysql中使用mysql列作为unix_timestamp
- java - java中的AWS Lambda“在完成请求之前退出进程”
- python - DNS.query 与 Socket.gethostbyname
- unit-testing - 在 jest-expo 中测试反应组件总是失败
- javascript - 出现“DevTools 无法解析 SourceMap”错误