我尝试在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)
字符串
1条答案
按热度按时间amrnrhlw1#
这个answer似乎也适用于这里:
默认情况下,celery使用多处理库作为并发实现。[.]不幸的是,线程在子进程被分叉后不能继承,因此创建了一个僵尸。
用
--pool threads
选项启动Celery worker对我来说很有用:字符串