在其中安装了Python芹菜的多个节点,在哪里运行



如果我有多个在不同节点上运行的工人,那么我怎么知道将任务分配给哪个工人?例如这是两名工人10.0.3.101和10.0.3.102;Redis后端在10.0.3.100上运行;当任务被发送到任务队列重新后端时,工人会得到并执行它。该工人是10.0.3.101或10.0.3.102?

此外,如果一个工人说这是10.0.3.101运行任务并突然停止,我怎么知道失败?即芹菜内的机制是否内置失败?

谢谢。

我通过在Google上搜索解决了问题。知识主要来自芹菜文档。我们可以在任务上下文中获取任务执行工作的主机名,也可以使用命令获取Worker Machine IP。任务定义为:

import time
import subprocess
from celery import current_task
@app.task
def report():
    id = current_task.request.id
    ip = subprocess.check_output(
        "ip addr | grep eth0 | grep inet |" +
        " cut -d t -f 2 | cut -d / -f 1", shell=True)
    ip = ip.split('n')[0].split(' ')[-1]
    hostname = current_task.request.hostname
    current_task.backend.store_result(
        id, result={"ip": ip, "hostname":  hostname}, status="READY")
    time.sleep(100)
    return {
        "ip": ip,
        "hostname": hostname
    }

如果在机器或容器上启动工人:

celery worker -A node.tasks --hostname="visible_hostname_in_request.hostname"

然后,我们可以使用以下行获取Worker的IP或主机名:

# python
>>> from node.tasks import report
>>> r = report.delay()
>>> r.result
据我所知,芹菜中没有内置的故障机制,因此我们需要通过自我实施。另外,我们可以使用第三方libs,例如Dispy ...

相关内容

  • 没有找到相关文章

最新更新