fabric为每个任务分配唯一索引

时间:2013-06-11 20:24:31

标签: python fabric

我正在使用fabric来运行一些测试,每台测试都在每台机器上进行。我想为每个运行调用传递一个唯一索引。 当不允许重复主机时,我正在做类似的事情:

@task
@parallel
def run_test():
    idx = env.hosts.index(env.host)
    run('run_test %d' % (idx)

这很好用。但是,现在我想在每台机器上运行几个测试。我通过多次传递相同的主机名然后设置env.dedupe_hosts = False来做到这一点,但是,这会破坏上面的模式,因为现在每个调用都将获得相同的索引。

有没有办法做到这一点。我尝试使用多进程锁定器分配索引,但这不起作用。

干杯。

1 个答案:

答案 0 :(得分:0)

[回答我自己的问题] 事实证明,使用多进程是正确的解决方案。您只需要使用Lock和Value,例如:

def get_unique_index():
    env.DUP_LOCKER.acquire()
    result = env.UNIQUE_ID.value
    env.UNIQUE_ID.value = result + 1
    env.DUP_LOCKER.release()
    return result

您需要初始化的地方:

env.UNIQUE_ID.value = 0
env.DUP_LOCKER = Lock()