Django orm - многоуровневые соединения с postgesql

у меня есть следующий код (модель django)

class AgentNmapTask(NmapTask):

    def execute(self):
        self.condition = ConditionTypes.LAUNCHED
        self.save()
        self.send_request_to_server('put',
            '/api/server/nmap/tasks/update/',
            {
                'status': self.condition,
                'id': self.id,
                'count_of_launches': self.count_of_launches,
                'next_run': self.next_run
            })
        results, error = super().execute()
        if error:
            agent_nmap_result: AgentNmapResult = AgentNmapResult.objects.create(task=self, error=error)
        else:
            agent_nmap_result: AgentNmapResult = AgentNmapResult.objects.create(task=self, result=results)
        self.send_request_to_server('put',
            '/api/server/nmap/tasks/update/',
            {
                'status': self.condition,
                'id': self.id,
                'count_of_launches': self.count_of_launches,
                'next_run': self.next_run
            })
        self.send_request_to_server('post',
            '/api/server/nmap/results/',
            {'nmap_task_id_on_agent': self.id, **model_to_dict(agent_nmap_result)})

i do next test

        for i in range(10):
            self.assertEqual(self.client.post(
                '/api/agent/nmap/tasks/',
                data={
                    'ip_range': f'127.0.0.{i}',
                    'arguments': '-p0-1000 -Pn',
                    'company': f'test',
                },
                format='json',
            ).status_code, 201)
            self.assertEqual(self.client.post(
                '/api/agent/nmap/tasks/',
                data={
                    'ip_range': f'127.0.0.{i}',
                    'arguments': '-p0-1000 -Pn',
                    'company': f'test123',
                },
                format='json',
            ).status_code, 201)

        def execute_task(agent_nmap_task):
            agent_nmap_task.execute()
        agent_nmap_tasks = AgentNmapTask.objects.all()
        executor = concurrent.futures.ThreadPoolExecutor(max_workers=10)
        future_tasks = [executor.submit(execute_task, agent_nmap_task) for agent_nmap_task in agent_nmap_tasks]
        concurrent.futures.wait(future_tasks)
        nmap_result_list = self.client.get('/api/agent/nmap/results/', format='json').json()
        self.assertEqual(len(nmap_result_list), 20)

Но когда я запускаю паралельную обработку с помощью concurrent.futures.wait, python не выполняет тест. Похоже, что это или postgesql заблокирован. В "ps aux" я вижу следующее:

postgres  65905  0.1  0.3 675020 29416 ?        Ss   23:38   0:00 postgres: user test_scanner_db ::1(54510) idle in transaction
postgres  65920  0.0  0.2 672076 19588 ?        Ss   23:38   0:00 postgres: user test_scanner_db ::1(54408) INSERT waiting
postgres  65922  0.0  0.2 672076 19576 ?        Ss   23:38   0:00 postgres: user test_scanner_db ::1(54422) INSERT waiting
postgres  65923  0.0  0.2 672076 19460 ?        Ss   23:38   0:00 postgres: user test_scanner_db ::1(54430) INSERT waiting
postgres  65926  0.0  0.2 671548 19296 ?        Ss   23:38   0:00 postgres: user test_scanner_db ::1(54442) INSERT waiting
postgres  65928  0.0  0.2 671548 19292 ?        Ss   23:38   0:00 postgres: user test_scanner_db ::1(54450) INSERT waiting
postgres  65930  0.0  0.2 671548 19292 ?        Ss   23:38   0:00 postgres: user test_scanner_db ::1(54452) INSERT waiting
postgres  65931  0.0  0.2 671548 19296 ?        Ss   23:38   0:00 postgres: user test_scanner_db ::1(54454) INSERT waiting
postgres  65933  0.0  0.2 671548 19296 ?        Ss   23:38   0:00 postgres: user test_scanner_db ::1(54462) INSERT waiting
postgres  65935  0.0  0.2 671548 19292 ?        Ss   23:38   0:00 postgres: user test_scanner_db ::1(54476) INSERT waiting
postgres  65937  0.0  0.2 671548 19292 ?        Ss   23:38   0:00 postgres: user test_scanner_db ::1(54488) INSERT waiting

Как я могу изменить свой код в модели или изменить конфигурацию django?

я ничего не пробовал

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