continuous_evaluation
continuous_evaluation copied to clipboard
celery异步分布式工具调研
http://www.celeryproject.org/ teamcity上只支持3个免费agent。 如果将来需要测试若干种机型task, 需要加若干agent才能支持。 调研了celery 工具
流程
master监测到teamcity 上的queue 中有tasks, 执行相应的调度
@app.task
def V100():
#Run tasks on v100
return {"task_kpis":"kpis_values", "task_type": "v100"}
@app.task
def P40():
#Run tasks on P40
return {"task_kpis":"kpis_values", "task_type": "p40"}
if __name__ == "__main__":
if "task name is startswith v100":
re = V100.delay()
elif "task name is startswith p40":
re = P40.delay()
print(re.result)
print(re.get(timeout=2))
print(re.status)
每一个work机器上启动work 监控进程 比如v100 work上
@app.task
def V100():
#Run tasks on v100
return {"task_kpis":"kpis_values", "task_type": "v100"}
celery -A download worker -l info -c 5
当master执行时, v100 worker上就会收到消息并执行V100函数
[2018-06-13 18:45:00,533: INFO/MainProcess] Received task: download.V100[03a74fb0-df6a-4ec0-b9cc-bc8e4870194e]
[2018-06-13 18:45:00,541: INFO/ForkPoolWorker-3] Task download.V100[03a74fb0-df6a-4ec0-b9cc-bc8e4870194e] succeeded in 0.00594224780798s: {'task_kpis': 'kpis_values'}
master上可以拿到各个worker的返回
{u'task_type': u'v100', u'task_kpis': u'kpis_values'}
celery存在的问题
-
多机时, 每个机器上都要有所有代码, master上并未执行真正逻辑, 依然需要注册该函数。 文档中对于多机使用不清晰,
-
我们ce中所有步骤都在docker中执行, 采用celery,所有命令都得加上docker run XX, 并且可能会踩坑
-
这样其实破坏了teamcity 本来的queue 队列和pool池子的 异步调用功能。考虑到优先维护好v100 和 p40 两个场景下tasks功能完备性, 目前agent 数目并不是瓶颈。
和春伟讨论决定继续按照加agent 方式进行, 以后有需要再用工具流