我试图弄清楚如何实现一个print语句,该语句在一个有一个worker池的函数中只打印一次。因此,如果池中有2个线程在运行,我只需要1个线程来打印它。我试图通过使用一个计数器来实现这一点,我一直在搞混多重处理。值以这种方式将正确递增,但我现在删除了它。每次计数器点击5,它就会从计数器中减去5,然后打印一些东西
from multiprocessing import Pool, Value, Lock
from colorama import Fore
counter = 0
def check(line):
counter+=1
if counter == 5:
counter-=5
print(Fore.YELLOW + "Counter Reached 5")
else:
pass
#my other code here that normally gets executed
def main():
#args.threads is taken from an argument given by the user before program starts
pool = Pool(args.threads)
pool.daemon = True
results = pool.map(check, arrange)
当然,它们更多的是代码,但这正是我需要帮助的地方。当计数器达到5时,我只需要一个线程来打印某些内容,而不是池中的所有线程
这里有一个与上面内容相近的快速示例
这就给出了(请注意,首先到达'5'的过程是随机的)
修改
Lock()
时Value
将防止潜在的争用问题。如果删除with lock:
行并多次运行上述代码,您将看到由于竞争条件的原因,它只会间歇性地打印两次。关于Lock
{a1}有一个很好的讨论相关问题 更多 >
编程相关推荐