gpt4 book ai didi

docker - 由于 Luigi 的工作分配不均, worker 过早死亡 (2.6.1)

转载 作者:IT老高 更新时间:2023-10-28 21:40:08 26 4
gpt4 key购买 nike

我们正在尝试运行一个分布在 docker swarm 集群上的简单管道。 luigi 工作人员被部署为复制的 docker 服务。他们成功启动,在向 luigi-server 请求工作几秒钟后,他们开始死亡,因为没有分配工作给他们,所有任务最终都分配给了一个 worker 。

我们必须在 worker 的 luigi.cfg 中设置 keep_alive=True 以强制他们不要死,但在管道完成后保留 worker 似乎是个坏主意。有没有办法控制工作分配?

我们的测试管道:

class RunAllTasks(luigi.Task):

tasks = luigi.IntParameter()
sleep_time = luigi.IntParameter()

def requires(self):
for i in range(self.tasks):
yield RunExampleTask(i, self.sleep_time)

def run(self):
with self.output().open('w') as f:
f.write('All done!')

def output(self):
return LocalTarget('/data/RunAllTasks.txt')


class RunExampleTask(luigi.Task):

number = luigi.IntParameter()
sleep_time = luigi.IntParameter()

@property
def cmd(self):
return """
docker run --rm --name example_{number} hello-world
""".format(number=self.number)

def run(self):
time.sleep(self.sleep_time)
logger.debug(self.cmd)
out = subprocess.check_output(self.cmd, stderr=subprocess.STDOUT, shell=True)
logger.debug(out)
with self.output().open('w') as f:
f.write(str(out))

def output(self):
return LocalTarget('/data/{number}.txt'.format(number=self.number))


if __name__ == "__main__":
luigi.run()

最佳答案

您的问题是一次 yield 单个需求的结果,而不是您想一次 yield 所有这些需求,如下所示:

def requires(self):
reqs = []
for i in range(self.tasks):
reqs.append(RunExampleTask(i, self.sleep_time))
yield reqs

关于docker - 由于 Luigi 的工作分配不均, worker 过早死亡 (2.6.1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43851114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com