Reading view

There are new articles available, click to refresh the page.

请教 Python 大佬 Django-Q 的使用问题

xuqiccr:

小弟在使用 Django-Q 的时候发现建了 100 个任务,但是 q_cluster 只会执行前几十个任务,后面的任务会在队列中一直到 timeout 结束,但是看进程 q_cluster 的进程又是一直存在,头秃,不知道有大佬可以指点一下吗?

我的 settings:

# djangoQ 配置
Q_CLUSTER = {
    'name': 'myDjangoQ',  # 启动服务名
    'workers': 2,  # 多少个 workers 的数量直接影响了任务处理的并发能力
    'label': 'myDjangoQ_label',
    'orm': 'default',  # 使用 Django ORM 作为后端
    # 'recycle': 4,  # 工作进程在处理完指定数量的任务后,将自动重启自身以释放内存资源
    'timeout': 10,  # 超时
    # 'recycle_frequency': 4,  # 重启频率
    'compress': False,  # 是否将任务包压缩后发送到代理
    'save_limit': 250,  # 保存成功任务结果
    'sync': False,  # 是否同步执行任务
    'queue_limit': 2,  # 集群中的任务数量
    'cpu_affinity': 1,  # 单个任务使用 cpu 核心
    "redis": {
        "host": config.get("redis", 'host'),
        "port": config.get("redis", 'port'),
        "db": 3,
        "password": config.get("redis", 'password'),
        "socket_timeout": 30,
        "charset": "utf-8",
        "decode_responses": True,
        "max_connections": 1000,
    }
}

触发函数和具体执行函数:

def test(request):
    from django_q.tasks import async_task, result
    info = {'code': 0, 'data': [], 'msg': ''}
    try:
        task_ids = []
        for i in range(700):
            task_id = async_task(my_function, i)  
            task_ids.append(task_id)
    except:
        info['msg'] = 'test error'
        logger.error(traceback.format_exc())
    return JsonResponse(info, safe=False)

def my_function(i):
    logger.info('i:{} 开始开始开始开始开始'.format(i))
    logger.info('i:{} 开始'.format(i))
    time.sleep(random.randint(3, 5))
    logger.info('i:{} 结束'.format(i))
    return i

实际输出:

11:15:31 [Q] INFO Process-1:1 processing [undress-hot-october-high]
2025-01-08 11:15:31.602 | INFO     | deploy_queue.views:my_function:1637 - i:20 开始开始开始开始开始
2025-01-08 11:15:31.602 | INFO     | deploy_queue.views:my_function:1643 - i:20 开始
2025-01-08 11:15:31.610 | INFO     | deploy_queue.views:my_function:1645 - i:19 结束
11:15:31 [Q] INFO Process-1:2 processing [network-pizza-sink-emma]
2025-01-08 11:15:31.611 | INFO     | deploy_queue.views:my_function:1637 - i:21 开始开始开始开始开始
2025-01-08 11:15:31.611 | INFO     | deploy_queue.views:my_function:1643 - i:21 开始
11:15:31 [Q] INFO Processed [tennessee-sierra-timing-michigan]
11:15:31 [Q] INFO Processed [arkansas-muppet-charlie-orange]
2025-01-08 11:15:35.615 | INFO     | deploy_queue.views:my_function:1645 - i:21 结束
2025-01-08 11:15:36.607 | INFO     | deploy_queue.views:my_function:1645 - i:20 结束
11:15:41 [Q] WARNING reincarnated worker Process-1:1 after timeout
11:15:41 [Q] INFO Process-1:5 ready for work at 30020
11:15:41 [Q] INFO Process-1:5 processing [zulu-october-green-berlin]
2025-01-08 11:15:41.873 | INFO     | deploy_queue.views:my_function:1637 - i:22 开始开始开始开始开始
11:15:42 [Q] WARNING reincarnated worker Process-1:2 after timeout

可以看到前面 21 个任务执行正常,但是第 22 个开始就全是 timeout 退出,完全没什么头绪,令人头大。

❌