Мне нужно запустить свою логику параллельно, используя все доступные процессоры, для этого я использую бильярдный пакет для пула, PFB мой технологический стек -
-Python 3
-Django==2.0.5
-Django rest from work
-celery==4.2.0
Моя проблема в том, что когда я бью себяAPI и вызывая мою задачу сельдерея, он выполняет до строки пула, но после этого, когда он зависает, я не получаю никаких сообщений об ошибках, но он не движется дальше.
PFB структура моего проекта:
-cdm
|cmdapp
| |
| |helper
| | |aaa.py
| |tasks
| | |bbb.py
| |api
| |ccc.py
|cdm
| |settings.py
|manage.py
PFB мой пример кода:
#cmdapp.helper.aaa.py
from billiard.pool import Pool
class A():
def squre(self,number):
return number*number
def calculate(self,number_list):
pool = Pool()
result = pool.map(self.squre, number_list)
return result
#cmdapp.tasks.bbb.py
from celery import task
from cmdapp.helper.aaa import A
@task
def calculation_task(number_list):
a_obj=A()
result=a_obj.calculate(number_list)
#cmdapp.api.ccc.py
from rest_framework.views import APIView
from rest_framework import status, permissions
from rest_framework.response import Response
from cmdapp.tasks.bbb import calculation_task
class C(APIView):
def get(self, request):
range_list=range(1000)
calculation_task.delay(range_list)
return Response({
"result": "success",
}, status=status.HTTP_200_OK)
Я просмотрел несколько статей, в которых упоминалось, что недоступная для выбора функция не может быть вызвана функцией pool.map.Здесь я не получаю, чтобы моя функция выбиралась или не выбиралась, и почему это зависает.Пожалуйста, помогите в этом.