在龙卷风的文献中提到通用协同程序装饰器来自旧版本。较新的应与aysnc一起使用。到目前为止,我还没能将这个小代码转换成tornado6.0.3。你知道吗
import tornado.web
import tornado.websocket
import tornado.httpserver
from random import randint
from tornado import gen
from tornado.ioloop import IOLoop
from web_handlers import HandlerIndexPage
from web_handlers import HandlerWebSocket
msg = 'none'
@gen.coroutine
def generate_random_int():
global msg
while True:
msg = str(randint(0, 100))
print('generated:', msg)
yield gen.sleep(1.0)
@gen.coroutine
def generate_message_to_sockets():
global msg
while True:
print ('new messageToCon: ', msg)
yield [con.write_message(msg) for con in HandlerWebSocket.connections]
yield gen.sleep(1.0)
class webApplication(tornado.web.Application):
def __init__(self):
handlers = [
(r'/', HandlerIndexPage),
(r'/websocket', HandlerWebSocket)
]
settings = {
'template_path': 'templates'
}
tornado.web.Application.__init__(self, handlers, **settings)
if __name__ == '__main__':
ws_app = webApplication()
server = tornado.httpserver.HTTPServer(ws_app)
port = 9090
server.listen(port)
print('websocket listening on port:'+ str(port))
IOLoop.current().spawn_callback(generate_random_int)
IOLoop.current().spawn_callback(generate_message_to_sockets)
IOLoop.instance().start()
如何正确使用async?你知道吗
在Tornado中,协程是可以插入Python2的生成器,而异步函数是Python3中的一级公民。它们有不同的语义(例如,您可以从异步函数
return
,但不能从协同程序)。您需要更改的代码如下所示:您可以在这里看到与您的用例类似的示例:https://www.tornadoweb.org/en/stable/ioloop.html#ioloop-objects
相关问题 更多 >
编程相关推荐