Fabric计数器显示完成了多少主机

时间:2016-06-29 09:35:23

标签: python multithreading locking fabric

我试图创建一个计数器,以便能够显示"主机5/100已完成"在我的任务结束时。我有一个反击classe:

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中的线程新手。 (我使用python 2.6(不甘心))

1 个答案:

答案 0 :(得分:1)

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

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