显示有多少主机已完成的结构计数器
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
,但结果相同。
我最后一次尝试是 lock
到 the_task
和 the_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
我正在尝试创建一个能够在我的任务结束时显示 "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
,但结果相同。
我最后一次尝试是 lock
到 the_task
和 the_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