我试图创建一个计数器,以便能够显示"主机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
但结果相同。
我的最后一次尝试是lock
给the_task
和the_task
:
with lock :
counter += 1
print counter
如何在相同的结构任务之间共享计数器?我是python中的线程新手。 (我使用python 2.6(不甘心))
答案 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