Ошибка celery-task при выполнении задачи Celery: объект AsyncResult не повторяется - PullRequest
0 голосов
/ 20 апреля 2020

Я использую Celery для выполнения задачи в фоновом режиме при отправке формы. Как только форма отправлена ​​во время запроса POST, я создал задачу для выполнения в фоновом режиме, используя метод задержки. Эта задача обрабатывает некоторые операции щелчка в другой сети с помощью веб-драйвера selenium и возвращает два списка python после выполнения задачи. На основе содержимого списка я хочу отобразить всплывающее сообщение.

Когда я выполняю задачу с использованием сельдерея и запускаю сервер веб-разработки Django при отправке формы, я получаю сообщение об ошибке: объект «AsyncResult» не является итерируемый ».

Пожалуйста, предложите, как решить эту проблему и продолжить.

Вот мой фрагмент кода: пример содержимого списка, полученного с помощью операций селена на веб-странице, показано ниже:

board_not_used_list = ['16123','14960']
board_mgr_permissions_not_present_list = [ '23456','45678']
    views.py:
    -------- 
    def conclude_key_issue_form(request, id=None):
        if id:
            action = 'edit'
            model = get_object_or_404(ConcludeKeyIssues, pk=id)

        else:
            action = 'submit'
            model = ConcludeKeyIssues()

        message = ""   


        if request.method == 'POST':

            form = ConcludeKeyIssuesForm(request.POST, instance=model)

            selected_model_name = request.POST.get('registered_model')      


            if form.is_valid():

                new_key_issue_request = form.save(commit=False)
                new_key_issue_request.integrator_id = request.user.username

                integrator_username = new_key_issue_request.integrator_id
                integrator_password = form.cleaned_data['integrator_pwd']

                new_key_issue_request.integrator_pwd = integrator_password

                new_key_issue_request.save()
                form.save_m2m()

                created_pk = new_key_issue_request.pk

                if id is None:
                    board_not_used_list,
                           board_mgr_permissions_not_present_list=                         
              task_check_board_availability_and_permissions.delay(created_pk)

            if board_not_used_list and 
board_mgr_permissions_not_present_list:
                alert_flag = True
                alert_message = "SAS Board ID's:{} in Not Used state."
                context = {'form': form, 'registered_model_data': registered_models,   
                           'alert': alert_flag, 'alert_message': json.dumps(alert_message)}
                return render(request, 'ConcludeKeyIssue.html', context)

            elif not board_not_used_list and board_mgr_permissions_not_present_list:
                alert_flag = True
                alert_message = "You don't have Board Manager Permissions"
                context = {'form': form, 'registered_model_data': registered_models,    
                           'alert': alert_flag, 'alert_message': json.dumps(alert_message)}
                return render(request, 'ConcludeKeyIssue.html', context)

            return HttpResponseRedirect('/swatapp/ConcludeKeyIssueList')

else:
    print("Fill Conclude Key Issues")
    form = ConcludeKeyIssuesForm(instance=model)    

    context = {'form': form,'Message': message, 'action': action}

    return render(request, 'ConcludeKeyIssue.html', context)

Tasks.py:
--------
@app.task(name="task_check_board_availability_and_permissions")
def task_check_board_availability_and_permissions(created_pk):
    print("From tasks.py conclude_key_issue_through_selenium")

    print("Conclude Key Issue Through Selenium")

    latest_record_pk = created_pk

    # Get the instances of ConcludeKeyIssues
    conclude_key_issue_obj_list = ConcludeKeyIssues.objects.all()

    # Get the latest created record details
    get_created_record_details = ConcludeKeyIssues.objects.get(pk=latest_record_pk)

    # Get the id or location value of selected from SAS URL
    sas_board_ids = get_created_record_details.sas_ids

    # Get SAS Board IDs in list
    sas_board_ids_list = sas_board_ids.split(",")


    # Input username and password
    username = get_created_record_details.integrator_id
    password = get_created_record_details.integrator_pwd

    board_not_used_list, board_mgr_permissions_not_present_list = \
        check_board_availability_and_permissions_for_all_requested_sas(sas_board_ids_list, username, 
                                                                       password)


    return board_not_used_list, board_mgr_permissions_not_present_list



settings.py:
------------
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'crispy_forms',
    'swatapp',
    'django_celery_results',
]
CELERY_BROKER_URL = 'amqp://guest:guest@localhost:5672//'
CELERY_RESULT_BACKEND = 'django-db'

1.Пожалуйста, предложите, как устранить эту ошибку и продолжить.

2. Как получить 2 списка [board_not_used_list, board_mgr_permissions_not_present_list] с использованием сельдерея результат.

...