Celery не выполняет задачу, когда я использую Tweepy в Django

Когда я хочу использовать tweepy с задачами celery, он не запускается и выдает ошибку

tasks.py

@shared_task(bind=True)
def retweet(self, consumer_key, consumer_secret, access_token, access_token_secret, clean_text, clean_count, clean_lang,
            sleep_time):
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_token_secret)
    api = tweepy.API(auth, wait_on_rate_limit=True)
    for tweet in tweepy.Cursor(api.search, q=(clean_text) + " -filter:mentions", count=clean_count,lang=clean_lang).items(int(clean_count)):
        tweet.retweet()

views.py

class Retweet(FormView):
    form_class = RetweetForm
    template_name = 'retweet.html'
    success_url = reverse_lazy('tweet:done')
    def form_valid(self, form):
        user = self.request.user
        query = form.cleaned_data.get('query')
        count = form.cleaned_data.get('count')
        time = form.cleaned_data.get('sleep_time')
        lang = form.cleaned_data.get('lang')
        clean_text = BeautifulSoup(query, "lxml").text
        clean_count = BeautifulSoup(count, 'lxml').text
        sleep_time = BeautifulSoup(time, 'lxml').text
        clean_lang = BeautifulSoup(lang, 'lxml').text
        retweet.delay(user.consumer_key, user.consumer_secret, user.access_token, user.access_token_secret,
                          clean_text, clean_count, clean_lang, sleep_time)

ошибка в celery worker:

Полное содержание тела сообщения было: b'\x80\x04\x95B\x01\x00\x00\x00\x00\x00\x00(\x8c\x19crR6CW6AB9MpsLkFsGLu4i1du\x94\x8c2cMEZk1z8zlSPnKlYZKTgpBXEqeZ4EMpf4HGSIe7j1adYAAwf5w\x94\x8c21157597880- a3cBcPLXFNaaeT3DYbajBdznpdGid1llqqmxEE0\x94\x8c- LBmrhuR6MWIvJ1YhLpR9DDUIxlqBwumfbsMxlmZagZtC1\x94\x8cE\xd9\x87\xd9\x88\xd8\xb4 \xd9\x85\xd8\xb5\xd9\x86\xd9\x88\xd8\xb9\xdb\x8c OR \xd8\xa8\xd8\xb1\xd9\x86\xd8\xa7\xd9\x85\xd9\x87 \xd9\x86\xd9\x88\xdb\x8c\xd8\xb3\xdb\x8c OR \xd8\xa7\xdb\x8c\xd9\x84\xd8\xa7\xd9\x86 \xd9\x85\xd8\xa7\xd8\xb3\xda\xa9\x94\x8c\x013\x94\x8c\x02fa\x94\x8c\x016\x94t\x94}\x94}\x94(\x8c\tcallbacks\x94N\x8c\x08errbacks\x94N\x8c\x05chain\x94N\x8c\x05chord\x94Nu\x87\x94. ' (333b) Traceback (последний последний вызов): File "/Users/User/PycharmProjects/twitterTest/venv/lib/python3.9/site-packages/celery/worker/consumer/consumer.py", line 581, in on_task_received strategy = strategies[type_] KeyError: 'tweet.tasks.retweet'

.

Это означает, что Celery не может найти реализацию задачи tweet.tasks.retweet, когда она была вызвана. Значит, вы тоже неправильно сконфигурировали:

  • Celery импортирует, например celery_app.conf.update(imports=['tweet.tasks']) или celery_app.conf.imports = ['tweet.tasks']
  • Or Celery include (example) e.g. celery_app = Celery(..., include=['tweet.tasks'])

У вас должно быть либо:

  • ['tweet.tasks'] если это ваша файловая структура
.
└── tweet
    └── tasks.py
  • или ['tweet'], если ваша файловая структура содержит __init__.py, которая импортирует все задания в этой папке.
.
└── tweet
    ├── __init__.py
    └── tasks.py
Вернуться на верх