django 永久挂起Celery任务调用OptaPy

sbdsn5lh  于 2023-11-20  发布在  Go
关注(0)|答案(1)|浏览(139)

我尝试在Django应用程序中使用Redis作为代理在Celery任务中运行OptaPy。Celery worker接收到任务,但永远保持PENDING并且 * 不返回结果 *。
如果我设置CELERY_TASK_ALWAYS_EAGER = True进行调试,代码可以正常运行,但是是同步的。

可能是什么问题?我可以采取哪些步骤来找出问题?

由于OptaPy是Java库的Python Package 器,我怀疑Celery可能无法很好地处理额外的线程,但我不知道如何调试或修复这个问题。
这是Celery任务,可以根据要求提供额外的代码:

@shared_task()
def schedule_task():

    solver_config = optapy.config.solver.SolverConfig() \
        .withEntityClasses(Lesson) \
        .withSolutionClass(TimeTable) \
        .withConstraintProviderClass(define_constraints) \
        .withTerminationSpentLimit(Duration.ofSeconds(30))

    solution = solver_factory_create(solver_config) \
        .buildSolver() \
        .solve(generate_problem())

    return str(solution)

字符串

amrnrhlw

amrnrhlw1#

这个answer似乎也适用于这里:
默认情况下,celery使用多处理库作为并发实现。[.]不幸的是,线程在子进程被分叉后不能继承,因此创建了一个僵尸。
--pool threads选项启动Celery worker对我来说很有用:

celery -A myapp worker --pool threads --loglevel=info

字符串

相关问题