我正在使用fabric来运行一些测试,每台测试都在每台机器上进行。我想为每个运行调用传递一个唯一索引。 当不允许重复主机时,我正在做类似的事情:
@task
@parallel
def run_test():
idx = env.hosts.index(env.host)
run('run_test %d' % (idx)
这很好用。但是,现在我想在每台机器上运行几个测试。我通过多次传递相同的主机名然后设置env.dedupe_hosts = False来做到这一点,但是,这会破坏上面的模式,因为现在每个调用都将获得相同的索引。
有没有办法做到这一点。我尝试使用多进程锁定器分配索引,但这不起作用。
干杯。
答案 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()