Web ソケットを提供するクラスがあり、PostgreSQL をリッスンします。asyncpg を使用して、add_listener を使用しようとすると、次のエラーが表示されます: RuntimeWarning: コルーチンが待機されませんでした。コールバックを非同期/待機する方法。「await self.listener」を追加してみましたが、うまくいきません。
これを別の方法で処理する方法はありますか?
import asyncio
import http
import websockets
import asyncpg
class App(object):
def __init__(self, loop):
self.loop = loop
self.ws_list = []
self.conn = None
async def ws_handler(self, ws, path):
if self.conn is None:
self.conn = await asyncpg.connect(user='xxx', password='xxx', database='pgws', host='127.0.0.1')
await self.conn.add_listener('todo_updates', self.listener)
print('new socket!!!')
self.ws_list.append(ws)
while True:
await asyncio.sleep(1)
async def listener(self, conn, pid, channel, payload):
print(payload)
for ws in self.ws_list:
task = asyncio.create_task()
await ws.send(payload)
if __name__ == "__main__":
loop = asyncio.get_event_loop()
app = App(loop)
start_server = websockets.serve(app.ws_handler, 'localhost', 8766)
app.loop.run_until_complete(start_server)
app.loop.run_forever()