Вам необходимо настроить брокера сообщений, например RabbitMQ или Redis. Если данные очередей должны быть постоянными, я рекомендую вам использовать RabbitMQ. Для отправки и получения задач вы можете использовать Celery, который позволяет вам как отправлять задачи в очередь, так и запускать их в воркерах Celery. Для мониторинга очереди существует Flower. В настоящее время очень хорошая практика - реализовать всю вашу архитектуру с помощью docker. Я покажу вам пример docker -compose.yml, который устанавливает 3 контейнера: кролик, цветок и сельдерей. единственное, что вам нужно сделать, это запустить команду docker-compose up -d
:
version: '3.3'
services:
rabbit:
image: rabbitmq:3-management-alpine
restart: always
environment:
RABBITMQ_ERLANG_COOKIE: cookie
RABBITMQ_DEFAULT_USER: Admin
RABBITMQ_DEFAULT_PASS: 1234
ports:
- 5672:5672
- 15672:15672
celery:
build:
context: .
volumes:
- ./src:/app
command: celery -A appendapp worker --loglevel=debug
environment:
RABBITMQ_HOST: rabbit
flower:
image: mher/flower
restart: always
ports:
- 5555:5555
command:
- "--broker=amqp://Admin:1234@rabbit//"
Код ./src/appendapp.py прочитать список из файла json, затем добавить элемент и, наконец, сохраните обновленный список в файл. код выглядит так:
from celery import Celery
import os, json, time
# Where the downloaded files will be stored
BASEDIR="./hola.json"
RABBIT_HOST = os.getenv("RABBITMQ_HOST") or "localhost"
# Create the app and set the broker location (RabbitMQ)
app = Celery('appendapp',
backend='rpc://',
broker=f'pyamqp://Admin:1234@{RABBIT_HOST}//')
@app.task
def add_item(item):
#time.sleep(2.5)
file = open(BASEDIR)
data = json.load(file)
data.append(item)
file.close()
wfile = open(BASEDIR, "w")
json.dump(data, wfile)
wfile.close()
return f"Se agrego {item}"