gpt4 book ai didi

tornado - Tornado write_message 并行屈服

转载 作者:行者123 更新时间:2023-12-01 23:41:36 28 4
gpt4 key购买 nike

我刚刚意识到 WebSocketHandler.write_message() 返回一个 Future。我以前没有在我的函数中产生过这个函数:

   @tornado.gen.coroutine
def ff(self,msg):
try:
self.write_message(json.dumps(msg))
except tornado.websocket.WebSocketClosedError:
pass

相对于:

   @tornado.gen.coroutine
def ff(self,msg):
try:
yield self.write_message(json.dumps(msg))
except tornado.websocket.WebSocketClosedError:
pass

为什么这一直没有错误? (在 Tornado 4.3 上运行)

还有设计模式:

for x in messages:
yield self.write_message(x)

是否建议用并行替换?

yield [self.write_message(x) for x in messages]

**并行 WebSocketHandler 想要向大量 websockets 发送相同的消息:

# WS is a list of WebSocketHandlers. 
yield [s.write_message(message) for s in WS]

最佳答案

write_message 返回的Future 用于流量控制:它通常立即返回,但当传出缓冲区达到一定大小时,它会等到较早的消息已发送。这会减慢应用程序的速度以匹配网络,而不是允许它向传出缓冲区添加越来越多的消息。

这些 Futures 应该并行产生:它违背了目的,我认为它甚至不能可靠地工作:每次调用 IOStream .write 使上一次调用返回的 Future 无效。

如果您不编写大量消息,则可以忽略这些 Future,但如果您想更好地控制应用程序消耗的内存量,请一次生成一个。

关于tornado - Tornado write_message 并行屈服,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37508197/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com