Использование concurent.futures вызывает у меня странную ошибку AttributeError на django python с каналами

Я столкнулся с проблемой, пытаясь использовать пакет concurrent.futures в python. Я работаю над сайтом, используя django и каналы для выполнения асинхронной коммуникации.

Мне нужно загрузить данные из многих url и я хочу иметь возможность сделать это с помощью мультипроцессинга.

К сожалению, я не могу заставить этот код работать, так как он всегда выдает ошибку AttributeError. Может ли это быть связано с архитектурой django или каналов? Я использую ProcessPoolExecutor в функции channel receive() внутри WebSocket Object.

Вот пример моего кода :

class CreateValuesConsumer(WebsocketConsumer):
    def connect(self):
        self.accept()

    def disconnect(self, close_code):
        pass

    def create_single_value(self, card):
        print('start create_single_value')
        condition = Condition.objects.filter(short_name='NM')[0]
        card_language = Language.objects.filter(short_name='FR')[0]
        seller_origin = Language.objects.filter(short_name='FR')[0]

        value = card.create_value(condition, card_language, seller_origin)
        if value is not None:
            message = "models.value." + str(value.id) + ' : create | card_name = ' \
                      + card.name_en.lower() + " | price = " + str(value.cheaper_price)
            is_error = 0
        else:
            error = ParsingError.objects.filter(card=card)[0]
            message = error.message
            is_error = 1

        self.send(text_data=json.dumps({
            'message': message,
            'is_error': is_error
        }))
        print('end')

    def receive(self, text_data):
        json_data = json.loads(text_data)
        extension = Extension.objects.get(pk=json_data["id"])

        cards_to_value = Card.objects.filter(extension=extension)
        today = datetime.now()

        for card in cards_to_value:
            values = Value.objects.filter(card=card, date__year=today.year, date__month=today.month, date__day=today.day)
            for value in values:
                print('delete' + str(value.pk))
                value.delete()

        if len(cards_to_value) > 0:
            futures = []
            with concurrent.futures.ProcessPoolExecutor() as executor:
                for card in cards_to_value:
                    futures.append(executor.submit(self.create_single_value, card=card))
                for future in concurrent.futures.as_completed(futures):
                    print(str(future.result))
                    print(str(future.exception()))

Вот ошибки, которые появляются при выполнении :

<bound method Future.result of <Future at 0x1bafbc283a0 state=finished raised AttributeError>>
Can't pickle local object 'convert_exception_to_response.<locals>.inner'

Я полагаю, что объект 'convert_exception_to_response..inner' - это объект django или channels, но если у кого-то есть идеи по решению, я буду рад их услышать :)

Спасибо

Вернуться на верх