【问题标题】:celery doesn't run task when I'm using Tweepy in Django当我在 Django 中使用 Tweepy 时,芹菜不运行任务
【发布时间】:2021-10-18 13:10:25
【问题描述】:

当我想在 celery 任务中使用 tweepy 时它不会运行,只会让我失败

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)

芹菜工人错误:

邮件正文的完整内容是: 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 或 \xd8\xa8\xd8\xb1\xd9\x86\xd8\xa7 \xd9\x85\xd9\x87 \xd9\x86\xd9\x88\xdb\x8c\xd8\xb3\xdb\x8c 或 \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) 回溯(最近一次通话最后): 文件“/Users/User/PycharmProjects/twitterTest/venv/lib/python3.9/site-packages/celery/worker/consumer/consumer.py”,第 581 行,在 on_task_received 策略 = 策略[type_] KeyError: 'tweet.tasks.retweet'

【问题讨论】:

    标签: python django celery tweepy django-celery


    【解决方案1】:

    表示Celery在调用时找不到任务tweet.tasks.retweet的实现。所以你也没有正确配置:

    • 芹菜imports 例如celery_app.conf.update(imports=['tweet.tasks'])celery_app.conf.imports = ['tweet.tasks']
    • 或 Celery include (example) 例如celery_app = Celery(..., include=['tweet.tasks'])

    你必须有:

    • ['tweet.tasks'] 如果这是你的文件结构
    .
    └── tweet
        └── tasks.py
    
    • ['tweet'],如果您的文件结构包含导入该文件夹中所有任务的__init__.py
    .
    └── tweet
        ├── __init__.py
        └── tasks.py
    

    【讨论】:

      猜你喜欢
      • 2019-02-26
      • 1970-01-01
      • 2022-01-21
      • 2020-10-07
      • 1970-01-01
      • 2021-05-08
      • 2020-08-07
      • 2022-01-27
      • 1970-01-01
      相关资源
      最近更新 更多