2016-09-19 53 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

相關問題