显示有多少主机已完成的结构计数器

Fabric counter to display how many host are done

我正在尝试创建一个能够在我的任务结束时显示 "host 5/100 done" 的计数器。我有一个柜台类 :

class ThreadCounter(object):
   def __init__(self, initval=0):
      self.val =int(initval)
      self.lock = threading.Lock()

  def increment(self):
      with self.lock:
         self.val += 1
  def value(self):
      with self.lock:
         return self.val

我尝试了一些方法来让它工作: 在我的主要功能中,我调用我的任务,将计数器作为参数

def main():
  my_counter = ThreadCounter(0)
  execute(the_task,my_counter)
@parallel
def the_task(counter):
  try:
    do---my--stuff
  finally :
    my_counter.increment()
    print my_counter.value()

显示时计数器始终为“1”。我觉得柜台没有共享。

我也尝试将计数器声明为 global,但结果相同。 我最后一次尝试是 lockthe_taskthe_task:

with lock :
  counter += 1
  print counter

我应该怎么做才能在相同的结构任务之间共享计数器?我是 python 中的新线程。 (我用的是python2.6(不甘心))

您可以使用装饰器来跟踪任务完成情况,例如,

total = 100
count = 0

def counter(f):
    def wrapped(*args, **kwargs):
        globals()["count"] += 1
        ret = f(*args, **kwargs)
        print "host %(count)s/%(total)s done" % globals()
        return ret
    return wrapped

@counter
def first_task(counter):
    # do---my--stuff
    pass

@counter
def second_task(counter):
    # do---my--stuff
    pass