django - Django celery 任务卡在阻塞链上
问题描述
我正在使用带有 python 3.5 的芹菜。我正在使用链执行序列化任务,我只想一次处理单个任务。
以下代码工作正常:
@shared_task(name='dummy1')
def dummy1(val):
logger.info('received: ' + val)
with RedisLock('testing.pid',60*60):
try:
logger.info("Lock acquired by " + val)
res = chain(dummy2.s(val), dummy3.s(val)).delay()
logger.info("Lock released")
except Exception as e:
logger.exception(str(e))
@shared_task(name='dummy2')
def dummy2(val):
logger.info('Dummy2 : ' + val)
time.sleep(3)
logger.info('Dummy2 complete')
return None
@shared_task(name='dummy3')
def dummy3(prev, val):
logger.info('Dummy3 : ' + val)
time.sleep(3)
logger.info('Dummy3 complete')
RedisLock 是一种基于分布式缓存的锁,用于一次运行单个任务。
但是,当我这样做时:
with RedisLock('testing.pid',60*60):
try:
logger.info("Lock acquired by " + val)
res = chain(dummy2.s(val), dummy3.s(val)).delay()
res.get() # blocking the process here
logger.info("Lock released")
链条无法按预期工作并且经常崩溃。
解决方案
推荐阅读
- c# - WPF 将项目添加到列表框,如果该项目尚不存在
- c++ - 在嵌套类型中保留 volatile
- javascript - 如何根据具有唯一编号的字段对网格中的数据进行排序?
- c++ - 使用 Qt vista 风格的 Widget 使我的 USB/BLE 数据采集速度不断加快......为什么?
- c# - 在 ResXManager 中添加新语言 - visual studio
- asp.net - ASP Url 重写规则以摆脱扩展
- r - 如何使用矩阵的不同幂生成绘图
- git - 本地 git 配置未推送
- javascript - 如果输入为空,则在输入中运行函数?
- sql - 将具有相同 ID 和空单元格的 3 行压缩为没有空单元格的一行