feat: crap
This commit is contained in:
@@ -5,8 +5,17 @@ app = Celery(
|
|||||||
__name__,
|
__name__,
|
||||||
broker='amqp://stocks:5W3FcvqXnnp1vv04jf673Mf8EY@localhost/stocks_vhost',
|
broker='amqp://stocks:5W3FcvqXnnp1vv04jf673Mf8EY@localhost/stocks_vhost',
|
||||||
backend='rpc://',
|
backend='rpc://',
|
||||||
|
|
||||||
)
|
)
|
||||||
app.conf.broker_url = 'amqp://stocks:5W3FcvqXnnp1vv04jf673Mf8EY@localhost/stocks_vhost'
|
app.conf.broker_url = 'amqp://stocks:5W3FcvqXnnp1vv04jf673Mf8EY@localhost/stocks_vhost'
|
||||||
app.conf.result_backend = 'rpc://'
|
app.conf.result_backend = 'rpc://'
|
||||||
|
app.conf.update(
|
||||||
|
worker_concurrency=8,
|
||||||
|
worker_prefetch_multiplier=1,
|
||||||
|
task_acks_late=True,
|
||||||
|
broker_pool_limit=10,
|
||||||
|
task_reject_on_worker_lost=True,
|
||||||
|
task_publish_retry=True,
|
||||||
|
broker_heartbeat=10
|
||||||
|
)
|
||||||
|
|
||||||
import background.tasks
|
import background.tasks
|
||||||
@@ -1,29 +1,40 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
from typing import List, Union
|
from typing import List, Union
|
||||||
|
|
||||||
|
from celery.signals import worker_ready
|
||||||
|
|
||||||
import background.update
|
import background.update
|
||||||
|
from limiter import BatchLimiter
|
||||||
from .celery_app import app
|
from .celery_app import app
|
||||||
|
|
||||||
|
|
||||||
|
def run_async(coroutine):
|
||||||
|
"""Запускает асинхронную корутину в синхронном контексте."""
|
||||||
|
return asyncio.run(coroutine)
|
||||||
|
|
||||||
|
|
||||||
@app.task(name='process_update')
|
@app.task(name='process_update')
|
||||||
def process_update(product_ids: list[int]):
|
def process_update(product_ids: list[int]):
|
||||||
loop = asyncio.get_event_loop()
|
# Запускаем асинхронную функцию
|
||||||
return loop.run_until_complete(background.update.process_update(product_ids))
|
return run_async(background.update.process_update(product_ids))
|
||||||
|
|
||||||
|
|
||||||
@app.task(name='update_marketplace')
|
@app.task(name='update_marketplace')
|
||||||
def update_marketplace(marketplace_id: int):
|
def update_marketplace(marketplace_id: int):
|
||||||
loop = asyncio.get_event_loop()
|
return run_async(background.update.update_marketplace(marketplace_id))
|
||||||
return loop.run_until_complete(background.update.update_marketplace(marketplace_id))
|
|
||||||
|
|
||||||
|
|
||||||
@app.task(name='update_marketplace_products')
|
@app.task(name='update_marketplace_products')
|
||||||
def update_marketplace_products(marketplace_id: int, product_ids: list[int]):
|
def update_marketplace_products(marketplace_id: int, product_ids: list[int]):
|
||||||
loop = asyncio.get_event_loop()
|
return run_async(background.update.update_marketplace_products(marketplace_id, product_ids))
|
||||||
return loop.run_until_complete(background.update.update_marketplace_products(marketplace_id, product_ids))
|
|
||||||
|
|
||||||
|
|
||||||
@app.task(name='update_marketplaces')
|
@app.task(name='update_marketplaces')
|
||||||
def update_marketplaces(marketplace_ids: Union[List[int], None]):
|
def update_marketplaces(marketplace_ids: Union[List[int], None]):
|
||||||
loop = asyncio.get_event_loop()
|
return run_async(background.update.update_marketplaces(marketplace_ids))
|
||||||
return loop.run_until_complete(background.update.update_marketplaces(marketplace_ids))
|
|
||||||
|
|
||||||
|
@worker_ready.connect
|
||||||
|
def worker_is_ready(sender, **kwargs):
|
||||||
|
limiter = BatchLimiter()
|
||||||
|
return run_async(limiter.clear_locks())
|
||||||
|
|||||||
@@ -68,6 +68,8 @@ class BatchLimiter:
|
|||||||
keys = []
|
keys = []
|
||||||
async for key in redis.scan_iter('*_lock*'):
|
async for key in redis.scan_iter('*_lock*'):
|
||||||
keys.append(key)
|
keys.append(key)
|
||||||
|
if not keys:
|
||||||
|
return
|
||||||
await redis.delete(*keys)
|
await redis.delete(*keys)
|
||||||
|
|
||||||
async def acquire_wildberries(self, key):
|
async def acquire_wildberries(self, key):
|
||||||
|
|||||||
@@ -14,4 +14,5 @@ celery[redis]
|
|||||||
pyjwt
|
pyjwt
|
||||||
redis
|
redis
|
||||||
redis[hiredis]
|
redis[hiredis]
|
||||||
celery[librabbitmq]
|
celery[librabbitmq]
|
||||||
|
gevent
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
ulimit -n 97816
|
ulimit -n 97816
|
||||||
/var/www/sipro/Sipro-Stocks/venv/bin/celery -A background.celery worker --loglevel=info --logfile=/var/www/sipro/Sipro-Stocks/celery.log
|
/var/www/sipro/Sipro-Stocks/venv/bin/celery -A background.celery_app worker -P gevent -c 20 --loglevel=info --logfile=/var/www/sipro/Sipro-Stocks/celery.log
|
||||||
Reference in New Issue
Block a user