Как запустить пользовательский RQ-работник в Docker-контейнере (Python, Flask и Redis) - PullRequest
0 голосов
/ 05 марта 2019

Я следовал великолепному учебнику Flask Mega от Мигеля Гринберга и успешно настроил веб-приложение Flask с очередью задач Redis и работниками RQ в контейнерах Docker.

Чтобы повысить производительность очереди задач, мне теперь нужноиспользовать мой собственный рабочий, а не рабочий RQ по умолчанию.

К сожалению, я изо всех сил пытаюсь понять, как запустить собственный рабочий в Docker.

Чтобы запустить рабочий RQ по умолчанию, в Flagk Mega Tutorial используется метод переопределения точки входа Docker с помощью "venv / bin / rq ", а затем укажите аргумент" worker -u redis: // redis-server: 6379/0 microblog-tasks ".

Имя исполняемого файла снабжается флагом --entrypoint, ааргументы команды передаются в самом конце, после имени образа контейнера.

Вот полная команда - только последние две строки относятся к этому вопросу.

$ docker run --name rq-worker -d --rm -e SECRET_KEY=my-secret-key \
-e MAIL_SERVER=smtp.googlemail.com -e MAIL_PORT=587 -e MAIL_USE_TLS=true \
-e MAIL_USERNAME=<your-gmail-username> -e MAIL_PASSWORD=<your-gmail-password> \
--link mysql:dbserver --link redis:redis-server \
-e DATABASE_URL=mysql+pymysql://microblog:<database-password>@dbserver/microblog \
-e REDIS_URL=redis://redis-server:6379/0 \
--entrypoint venv/bin/rq \
microblog:latest worker -u redis://redis-server:6379/0 microblog-tasks

У меня есть собственный пользовательский работник со следующим кодом, взятым непосредственно из документации RQ:

#!/usr/bin/env python
import sys
from rq import Connection, Worker

# Preload libraries
import library_that_you_want_preloaded

# Provide queue names to listen to as arguments to this script,
# similar to rq worker
with Connection():
    qs = sys.argv[1:] or ['default']

    w = Worker(qs)
    w.work()

Учитывая, что мой пользовательский работник находится в контейнере Docker по адресу "home / dashboard / app / custom_worker.py"Какие команды мне нужно предоставить при запуске контейнера Docker для создания RQ-работника с использованием моего настроенного рабочего сценария?До сих пор я пробовал следующее:

$ docker run --name rq-worker -d --rm -e SECRET_KEY=my-secret-key \
-e MAIL_SERVER=smtp.googlemail.com -e MAIL_PORT=587 -e MAIL_USE_TLS=true \
-e MAIL_USERNAME=<your-gmail-username> -e MAIL_PASSWORD=<your-gmail-password> \
--link mysql:dbserver --link redis:redis-server \
-e DATABASE_URL=mysql+pymysql://microblog:<database-password>@dbserver/microblog \
-e REDIS_URL=redis://redis-server:6379/0 \
--entrypoint venv/bin/rq \
microblog:latest /home/dashboard/app/custom_worker.py -u redis://redis-server:6379/0 microblog-tasks

, а также ...

$ docker run --name rq-worker -d --rm -e SECRET_KEY=my-secret-key \
-e MAIL_SERVER=smtp.googlemail.com -e MAIL_PORT=587 -e MAIL_USE_TLS=true \
-e MAIL_USERNAME=<your-gmail-username> -e MAIL_PASSWORD=<your-gmail-password> \
--link mysql:dbserver --link redis:redis-server \
-e DATABASE_URL=mysql+pymysql://microblog:<database-password>@dbserver/microblog \
-e REDIS_URL=redis://redis-server:6379/0 \
--entrypoint /home/dashboard/app \
microblog:latest custom_worker -u redis://redis-server:6379/0 microblog-tasks

Любая помощь будет принята с благодарностью.В Интернете много сообщений о создании настраиваемого сотрудника RQ, но я не нашел подробных сведений о том, как вы практически используете своего настраиваемого сотрудника при развертывании.

Спасибо, Робин

...