我正在使用 Celery redis 運行一個用于異步任務的應用程式。我設法讓芹菜看到任務串列。但是,我的任務不是由 Celery 工人執行,而是由 Django 行程執行。
我嘗試呼叫任務成功.delay()和.apply_async()失敗(實際上在這些情況下,對任務的呼叫會無限期地被阻止,日志中沒有顯示任何內容)。
我可能遺漏了一些非常基本的東西,但看不到在哪里。
相關設定如下:
設定.py
CELERY_REDIS_DB = os.environ.get("REDIS_DB_CELERY", 0)
CELERY_REDIS_HOST = os.getenv("REDIS_HOSTNAME", "redis")
CELERY_REDIS_PORT = 6379
CELERY_RESULT_BACKEND = BROKER_URL = (
f'redis://{CELERY_REDIS_HOST}:{CELERY_REDIS_PORT}/{CELERY_REDIS_DB}'
)
CELERY_TIMEZONE = TIME_ZONE
CELERY_RESULT_EXPIRES = 5 * 60 * 60
芹菜.py
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'maat.settings')
app = Celery('maat')
# Using a string here means the worker don't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
# should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')
# Load task modules from all registered Django app configs.
app.autodiscover_tasks()
任務.py
@shared_task
def remove_task(
environment=None,
payload=None,
**kwargs,
):
LOGGER.info('Received task, now removing')
...
視圖.py
class MyClass(
LoginRequiredMixin,
PermissionRequiredMixin,
SingleObjectMixin,
APIView
):
return_403 = True
model = models.Environment
slug_field = 'name'
slug_url_kwarg = 'environment'
def delete(self, request, environment):
tasks.remove_task(environment=environment, payload=request.data)
- 姜戈 3.2
- 芹菜[redis] 5.1.2
- Redis 3.5.3
- django 芹菜結果 2.0.1
uj5u.com熱心網友回復:
假設celery.py住在可以訪問的地方,views.py問題很可能是因為您正在使用共享任務,django 不知道如何在沒有更多資訊的情況下與 celery 代理進行通信。
為了做到這一點,我們可以遵循堆疊溢位時樂于助人的朋友的建議,并在您看來執行以下操作:
from path.to.celery import app
app.set_default()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/346386.html
