【问题标题】:billiard.pool map function getting hangbilliard.pool 地图功能挂起
【发布时间】:2018-11-23 11:48:01
【问题描述】:

我需要使用所有可用的 CPU 并行运行我的逻辑,因为我使用台球包进行池化, PFB 我的技术栈 -

-Python 3
-Django==2.0.5
-Django rest from work
-celery==4.2.0

我的问题是,当我点击我的 rest-API 并触发我的 celery 任务时,它一直执行到池线,但在那之后,它挂起,我没有收到任何错误消息,但它没有进一步移动。

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 函数调用。在这里,我没有得到我的功能是可选择的还是不可选择的,以及为什么它会挂起。请帮忙。

【问题讨论】:

  • 你使用台球而不是芹菜有什么原因吗?如果你自己用芹菜,你想做的事情会容易得多。
  • @2ps,感谢您抽出宝贵时间。实际上,我发布的代码只是一个示例。在我的真实代码中,有一个异步作业正在调用具有复杂计算的其他函数,这就是我想使用池的原因....只是 bcz celery 不支持多处理我正在使用台球。
  • 这里的问题完全相同,cpu 绑定进程作为 celery 任务,无法通过并行映射提高性能

标签: python django multithreading celery python-multiprocessing


【解决方案1】:

我也遇到了同样的问题,我通过将对象方法转换为类方法或者静态方法解决了这个问题

我认为这种方式可以解决这个问题。

class A():

    @classmethod
    def squre(cls,number):
        return number*number

    def calculate(self,number_list):
        pool = Pool()
        result = pool.map(squre, number_list)
        return result

【讨论】:

    猜你喜欢
    • 2021-10-05
    • 2020-03-13
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多