Как заставить dramatiq работать с redis в среде Windows / WSL? - PullRequest
0 голосов
/ 06 мая 2020

Я создал простой скрипт для тестирования dramatiq с помощью redis:

broker_redis = RedisBroker(host='localhost', port=6379)

@dramatiq.actor
def sq(x):
    time.sleep(random.randint(2, 4))
    return x * x

Я использую эту команду для запуска внутри WSL (как предписано документами):

dramatiq script_name:broker_redis

Он работает без ошибок и выводит на консоль следующие строки:

[2020-05-06 09:46:28,535] [PID 508] [MainThread] [dramatiq.MainProcess] [INFO] Dramatiq '1.8.1' is booting up.
[2020-05-06 09:46:28,535] [PID 511] [MainThread] [dramatiq.WorkerProcess(1)] [INFO] Worker process is ready for action.
[2020-05-06 09:46:28,546] [PID 510] [MainThread] [dramatiq.WorkerProcess(0)] [INFO] Worker process is ready for action.
[2020-05-06 09:46:28,548] [PID 544] [MainThread] [dramatiq.ForkProcess(0)] [INFO] Fork process 'dramatiq.middleware.prometheus:_run_exposition_server' is ready for action.
[2020-05-06 09:46:28,559] [PID 513] [MainThread] [dramatiq.WorkerProcess(3)] [INFO] Worker process is ready for action.
[2020-05-06 09:46:28,569] [PID 512] [MainThread] [dramatiq.WorkerProcess(2)] [INFO] Worker process is ready for action.
[2020-05-06 09:46:28,581] [PID 515] [MainThread] [dramatiq.WorkerProcess(5)] [INFO] Worker process is ready for action.
[2020-05-06 09:46:28,596] [PID 514] [MainThread] [dramatiq.WorkerProcess(4)] [INFO] Worker process is ready for action.
[2020-05-06 09:46:28,634] [PID 516] [MainThread] [dramatiq.WorkerProcess(6)] [INFO] Worker process is ready for action.
[2020-05-06 09:46:28,634] [PID 517] [MainThread] [dramatiq.WorkerProcess(7)] [INFO] Worker process is ready for action.

Но когда я импортирую эту функцию в интерпретатор и использую на ней метод send ...

from script_name import sq
sq.send(10)

... он ждет несколько секунд, а затем вызывает ошибку dramatiq.errors.ConnectionClosed:

dramatiq.errors.ConnectionClosed: AMQPConnectionError: (AMQPConnectorSocketConnectError: ConnectionRefusedError(10061, 'Unknown error'),)

Похоже, этот вызов не может отправить сообщение в dramatiq, работающий внутри WSL .

Примечание: я не установил RabbitMQ, но предполагал, что это не требуется, если я собираюсь использовать Redis.

...