如何在与asyncio.create_server一起使用的类中运行方法异步?

时间:2016-09-19 02:29:21

标签: python python-asyncio autobahn

我正在使用autobahn和asyncio,我试图在扩展WebSocketServerFactory的类中创建一个方法,每隔x秒运行一次。

这是高速公路网站上的文件的用法:

from autobahn.asyncio.websocket import WebSocketServerFactory
factory = WebSocketServerFactory()
factory.protocol = MyServerProtocol

loop = asyncio.get_event_loop()
coro = loop.create_server(factory, '127.0.0.1', 9000)
server = loop.run_until_complete(coro)

我只是用扩展它的类替换了WebSocketServerFactory类,我想每隔x秒在其中运行一个方法。

我在高速公路网站上找到了一个这样的例子,但它使用的是扭曲而不是asyncio。

以下是我想要的简短示例(original and full version),但示例使用了扭曲:

class CustomServerFactory(WebSocketServerFactory):

def __init__(self, url):
    WebSocketServerFactory.__init__(self, url)
    self.tick()

def tick(self):
    print("tick!")
    self.do_something()
    reactor.callLater(1, self.tick)

如何使用asyncio实现同样的目标?

1 个答案:

答案 0 :(得分:2)

根据您的示例,可以使用asyncio事件循环完成与asyncio相同的功能:Asyncio delayed calls

所以在你的例子中,这意味着:

def tick(self):
    print("tick!")
    self.do_something()
    loop.call_later(1, self.tick)

其中loop是您之前创建的asyncio事件循环变量:

loop = asyncio.get_event_loop()