Задачи Celery, возвращающие AsyncResult вместо словаря - PullRequest
0 голосов
/ 09 апреля 2019

Я столкнулся с проблемой.Я использую сельдерей для асинхронной задачи.Когда я запускаю работника (RabbitMQ), shared_task запускается успешно, но не возвращает ожидаемого результата.Я хочу вернуть словарь, когда shared_task запускается, но получил этот тип ответа.249ccaf5-dae9-4296-b093-e0f09eff2632

Мой views.py , где shared_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 file

@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

Заранее спасибо за помощь

1 Ответ

0 голосов
/ 09 апреля 2019

Как видно из названия, это Асинхронная задача .Он будет выполняться только при наличии работника .Если вам нужен результат в реальном времени / мгновенно, вам не нужна асинхронная задача

, для этого вызовите функцию без части delay() как

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


Вы можете прочитать больше о Задаче Celery s
1. Celery: обзор архитектуры и как она работает
2. Для каких вещей я должен использовать сельдерей?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...