2016-09-19 56 views
0

我与asyncio使用高速公路,我试图让一个方法内扩展WebSocketServerFactory的类运行每x秒。如何在正在与asyncio.create_server一起使用的类中运行方法异步?

这是高速公路网站上的文档怎么做的:

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),但该示例使用双绞线:使用ASYNCIO

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) 

我怎样才能achive是一回事吗?

回答

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() 
+0

传递回路的类,然后使用self.loop.call_later似乎工作得很好。谢谢! – Alex

相关问题