- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚意识到 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/
我对现代JavaScript(ES8)有点陌生。异步产生的首选方法是什么,即使用await在事件循环的某些将来迭代中继续执行脚本?我看到了以下选项: async function yield1() {
我有一个 Duck 类,它有一个生成 block 的 initialize 方法: class Duck def initialize() if block_given? yi
我目前正在学习 F#,我非常喜欢 yield! (yield-bang) 运算符。不仅因为它的名字,当然也因为它的作用。 yield! 运算符基本上允许您从序列表达式中产生序列的所有元素。这对于组合枚
我是一名优秀的程序员,十分优秀!