【问题标题】:Celery tasks returning AsyncResult instead of Dictionary芹菜任务返回 AsyncResult 而不是 Dictionary
【发布时间】:2019-04-09 04:52:29
【问题描述】:

我正面临这个问题。我正在使用 celery 执行异步任务。当我运行工作程序(RabbitMQ)时,shared_task 运行成功,但没有按预期返回结果。我想在 shared_task 运行但得到这种类型的响应时返回字典。 249ccaf5-dae9-4296-b093-e0f09eff2632

我的 views.pyshared_task 正在运行

def request_twitter(request):
    global screenname
    access_key = request.session['access_key_tw']
    access_token = request.session['access_secret_tw']
    dic = requesting_twitter.delay(access_key,access_token,screenname)
    print(dic)
    return render(request,'info.html', dic)

还有我的 tasks.py 文件

@shared_task
    def requesting_twitter(ackey,asecret,sc):
    CONSUMER_KEY = 'K9lD2i0feSrOtCBQVIjvrygce'
    CONSUMER_SECRET = '82HqosHNh4JD4NMruRjRZ4pLU5C1zf983tDzhHlEwuamaSPKGk'
    oauth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
    access_key = ackey
    access_secret = asecret
    oauth.set_access_token(access_key, access_secret)
    api = tweepy.API(oauth)
    screenname = sc
    user = api.get_user(screenname)

    userTweet = api.user_timeline(screenname, count=1)
    for tweets in userTweet:
        most_recent_tweet = tweets.created_at
    try:
        sn = user.screen_name
    except:
        sn = ''
    try:
        disply_name = user.name
    except:
        disply_name = ''
    try:
        descriptin = user.description
    except:
        descriptin = ''
    try:
        locatin = user.location
    except:
        locatin = ''
    try:
        urll = user.url
    except:
        urll = ''
    try:
        Date_joined = user.created_at
    except:
        Date_joined = ''
    try:
        twitter_user_id = user.id
    except:
        twitter_user_id = ''
    try:
        profile_lang = user.lang
    except:
        profile_lang = ''
    try:
        time_zzone = user.time_zone
    except:
        time_zzone = ''
    try:
        tweetzz = user.statuses_count
    except:
        tweetzz = ''
    try:
        followingg = user.favourites_count
    except:
        followingg = ''
    try:
        followerss = user.followers_count
    except:
        followerss = ''
    try:
        likess = user.favourites_count
    except:
        likess = ''
    try:
        banner = user.profile_banner_url
    except:
        banner = ''
    try:
        profile_pic = user.profile_image_url
    except:
        profile_pic = ''
    try:
        listss = user.listed_count
    except:
        listss = ''

    dic = {
        'sn': sn,
        'display_name': disply_name,
        'description': descriptin,
        'location': locatin,
        'url': urll,
        'Date_joined': Date_joined,
        'user_id': twitter_user_id,
        'lang': profile_lang,
        'time_zone': time_zzone,
        'tweets': tweetzz,
        'followers': followerss,
        'likes': likess,
        'lists': listss,
        'banner': banner,
        'profile_pic': profile_pic,
        'most_recent_post': most_recent_tweet
    }

    return dic

提前感谢您的帮助

【问题讨论】:

    标签: django rabbitmq django-celery


    【解决方案1】:

    顾名思义,它的异步任务。它只会在 worker 可用时执行。 如果您需要实时/即时结果,则不需要异步任务

    为此,调用没有 delay() 部分的函数作为

    def request_twitter(request):
        global screenname
        access_key = request.session['access_key_tw']
        access_token = request.session['access_secret_tw']
        dic = requesting_twitter(access_key,access_token,screenname)
        print(dic)
        return render(request,'info.html', dic)


    您可以阅读更多关于 Celery Tasks
    1.Celery: an overview of the architecture and how it works
    2.What kinds of things should I use Celery for?

    【讨论】:

    • 感谢您回答@JPG。但是当我在没有**delay()** 部分的情况下运行它时,它不会立即运行,因为它正在执行大量计算。所以我的方法是使用芹菜。如果这种方法是错误的,您能否指出一些其他的替代方案,请
    • 如果您使用芹菜,它不会加快您的进程。但是,您可以在任务 id later 的帮助下参考特定 celery 任务的结果和状态
    猜你喜欢
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 2018-05-11
    • 2018-05-17
    • 1970-01-01
    • 2014-12-04
    相关资源
    最近更新 更多