Проблема с aioredis с Sanic - PullRequest
       25

Проблема с aioredis с Sanic

0 голосов
/ 23 апреля 2020

Я пытаюсь протестировать Pub-sub Redis в настройке Sani c для нескольких рабочих, просто публикуя данные на канале, используя один маршрут Sani c (/setlevel), и читая с другого маршрута (/api).

Однако сообщение не может быть опубликовано на канале, за которым следует необъяснимое исключение (после тайм-аута?) Для вызова на /setlevel.

import socket
import asyncio

from sanic import Sanic
from sanic.response import json as sjson
import aioredis

app = Sanic(__name__)

@app.route("/api")
async def route1(request):
    print('Rcvd req in /api')
    await tsk
    return sjson('reached')


@app.route("/setlevel")
async def route2(request):
    print('Rcvd req in /setlevel')
    res = await pub.publish_json('chan1', ["Hello", "world"])
    assert res == 1
    return sjson('reached')


async def reader(ch):
    while (await ch.wait_message()):
        msg = await ch.get_json()
        print("Got Message:", msg)


async def main(argv=sys.argv):

    global pub, sub, tsk

    pub = await aioredis.create_redis('redis://localhost')
    sub = await aioredis.create_redis('redis://localhost')
    res = await sub.subscribe('chan1')
    ch1 = res[0]
    tsk = asyncio.ensure_future(reader(ch1))

    server_socket = '/tmp/sanictest.sock'
    sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
    sock.bind(server_socket)

    app.run(sock=sock, workers=4, debug=True)

    print('Closing pub-sub...')
    sub.close()
    pub.close()

    return


if __name__ == '__main__':
    asyncio.run(main())

Что я здесь не так делаю?

...