dev
AlexP077 3 years ago committed by Dmitry Titov
parent e0f6314f0d
commit 75c78fc0c5

@ -17,9 +17,11 @@ x-frontend-variables: &frontend-variables
DOMAIN: "${DOMAIN}" DOMAIN: "${DOMAIN}"
REACT_APP_DOMAIN_URL: "https://${DOMAIN}/" REACT_APP_DOMAIN_URL: "https://${DOMAIN}/"
x-martin-variables: &martin-variables x-martin-variables: &martin-variables
MARTIN_PORT: "${MARTIN_PORT}" MARTIN_PORT: "${MARTIN_PORT}"
services: services:
django: django:
container_name: ${CONTAINERS_NAME}_django container_name: ${CONTAINERS_NAME}_django
@ -44,7 +46,35 @@ services:
restart: always restart: always
depends_on: depends_on:
- db - db
loyalty-rabbit:
image: rabbitmq:3.9-management
container_name: loyalty-rabbit
volumes:
- rabbitmq_data:/var/lib/rabbitmq
- rabbitmq_log:/var/log/rabbitmq
logging:
driver: none
restart: always
ports:
- 5672:5672
beat:
restart: always
build:
context: .
entrypoint: [ "celery", "-A", "postamates.celery:app", "beat" ]
worker:
restart: always
environment:
<<: *postgres-variables
<<: *django-variables
build:
context: .
entrypoint: [ "celery", "-A", "postamates.celery:app", "worker" ]
depends_on:
- db
- loyalty-rabbit
- django
db: db:
container_name: ${CONTAINERS_NAME}_db container_name: ${CONTAINERS_NAME}_db
image: mdillon/postgis image: mdillon/postgis

@ -0,0 +1,3 @@
from .celery import app as celery_app
__all__ = ('celery_app',)

@ -0,0 +1,24 @@
import os
from celery import Celery
from postamates.settings import CELERY_BROKER_URL
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'postamates.settings')
app = Celery('postamates', broker=CELERY_BROKER_URL,
include=["service.tasks"], )
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
# заносим таски в очередь
# app.conf.beat_schedule = {
# 'every': {
# 'task': 'service.tasks.raschet',
# 'schedule': crontab(),#периодичность (По дефолту каждую минуту)
# 'args':[5]
# },
#
# }

@ -9,6 +9,7 @@ https://docs.djangoproject.com/en/3.2/topics/settings/
For the full list of settings and their values, see For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.2/ref/settings/ https://docs.djangoproject.com/en/3.2/ref/settings/
""" """
import os import os
from pathlib import Path from pathlib import Path
@ -42,6 +43,7 @@ INSTALLED_APPS = [
'django_json_widget', 'django_json_widget',
'django.contrib.gis', 'django.contrib.gis',
'rest_registration', 'rest_registration',
'django_celery_beat',
] ]
MIDDLEWARE = [ MIDDLEWARE = [
@ -162,3 +164,6 @@ REST_REGISTRATION = {
'VERIFICATION_FROM_EMAIL': 'noreply@spatiality.website', 'VERIFICATION_FROM_EMAIL': 'noreply@spatiality.website',
} }
SRID = 4326 SRID = 4326
# celery
CELERY_BROKER_URL = "amqp://loyalty-rabbit"

@ -1,8 +1,7 @@
from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin from django.contrib import admin
from django.urls import path, include from django.urls import path, include
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [ urlpatterns = [
path('admin/', admin.site.urls), path('admin/', admin.site.urls),

@ -1,18 +1,25 @@
amqp==5.1.1
asgiref==3.6.0 asgiref==3.6.0
attrs==22.2.0 attrs==22.2.0
billiard==3.6.4.0
catboost==1.1.1 catboost==1.1.1
celery==5.2.7
certifi==2022.12.7 certifi==2022.12.7
charset-normalizer==3.0.1 charset-normalizer==3.0.1
click==8.1.3 click==8.1.3
click-didyoumean==0.3.0
click-plugins==1.1.1 click-plugins==1.1.1
click-repl==0.2.0
cligj==0.7.2 cligj==0.7.2
coreapi==2.3.3 coreapi==2.3.3
coreschema==0.0.4 coreschema==0.0.4
cycler==0.11.0 cycler==0.11.0
Django==3.2 Django==3.2
django-celery-beat==2.4.0
django-cors-headers==3.12.0 django-cors-headers==3.12.0
django-json-widget==1.1.1 django-json-widget==1.1.1
django-rest-registration==0.7.3 django-rest-registration==0.7.3
django-timezone-field==5.0
djangorestframework==3.11.1 djangorestframework==3.11.1
drf-yasg==1.21.5 drf-yasg==1.21.5
et-xmlfile==1.1.0 et-xmlfile==1.1.0
@ -29,6 +36,7 @@ inflection==0.5.1
itypes==1.2.0 itypes==1.2.0
Jinja2==3.1.2 Jinja2==3.1.2
kiwisolver==1.4.4 kiwisolver==1.4.4
kombu==5.2.4
MarkupSafe==2.1.2 MarkupSafe==2.1.2
matplotlib==3.5.2 matplotlib==3.5.2
munch==2.5.0 munch==2.5.0
@ -38,12 +46,14 @@ packaging==23.0
pandas==1.4.2 pandas==1.4.2
Pillow==9.4.0 Pillow==9.4.0
plotly==5.13.0 plotly==5.13.0
prompt-toolkit==3.0.37
pre-commit pre-commit
psycopg2-binary==2.9.3 psycopg2-binary==2.9.3
pygeos==0.14 pygeos==0.14
pyparsing==3.0.9 pyparsing==3.0.9
pyproj==3.4.1 pyproj==3.4.1
pyshp==2.3.0 pyshp==2.3.0
python-crontab==2.7.1
python-dateutil==2.8.2 python-dateutil==2.8.2
pytz==2022.7.1 pytz==2022.7.1
requests==2.28.2 requests==2.28.2
@ -57,7 +67,11 @@ sqlparse==0.4.3
tenacity==8.2.1 tenacity==8.2.1
tqdm==4.64.0 tqdm==4.64.0
typing_extensions==4.5.0 typing_extensions==4.5.0
tzdata==2022.7
uritemplate==4.1.1 uritemplate==4.1.1
urllib3==1.26.14 urllib3==1.26.14
vine==5.0.0
wcwidth==0.2.6
xlrd==1.2.0 xlrd==1.2.0
XlsxWriter==3.0.8 XlsxWriter==3.0.8

@ -0,0 +1,3 @@
from postamates.celery import app as celery_app
__all__ = ['celery_app']

@ -0,0 +1,15 @@
import time
from celery import shared_task
# Запустить worker
# celery -A postamates worker -l info
# Запустить scheduler
# celery -A postamates beat -l INFO.
@shared_task()
def raschet(sec: int):
print('Hello. Celery task is running...')
time.sleep(sec)
print('Finish')

@ -17,6 +17,7 @@ from service import models
from service import pagination from service import pagination
from service import serializers from service import serializers
from service import utils from service import utils
from service.tasks import raschet
from service.permissions import UserPermission from service.permissions import UserPermission
from service.service import PointService from service.service import PointService
from service.utils import load_data from service.utils import load_data
@ -186,6 +187,11 @@ class PlacementPointViewSet(ReadOnlyModelViewSet):
pred = PointService.get_first_10_k() pred = PointService.get_first_10_k()
return Response({'prediction_current': pred}, status=http_status.HTTP_200_OK) return Response({'prediction_current': pred}, status=http_status.HTTP_200_OK)
@action(detail=False, methods=['get'])
def start(self, request):
raschet.delay(5)
return Response('Sucess', 200)
class refresh_placement_points(APIView): class refresh_placement_points(APIView):
@staticmethod @staticmethod

Loading…
Cancel
Save