我有一个脚本,每当该函数由设置控制台标题的进程运行时,我都会根据不同的条件通过使用计数器设置锁来做到这一点。因此,如果成功,则将+1添加到成功计数器。在我使用笔记本电脑拥有的2个以上内核之后,似乎会出错,它将开始倒数,然后在数字之间倒数第四个。我以为设置锁可以解决此问题,但显然不能解决问题。
#random code here
successlock = Lock()
successvalue = Value('i', 0)
#function starts here, locks and counters are defined outside the function
strin = "f"
if strin = "f":
with successlock:
successvalue.value+=1
ctypes.windll.kernel32.SetConsoleTitleW(str(successvalue.value))
显然strin每次都具有不同的值,我也正在使用多处理池,我的代码运行良好,只是计数器出错了。
答案 0 :(得分:0)
即使成功案例无效,也要设置标题。您还引用了锁外部的successvalue
。当两个线程同时设置标题时,也会引起争用条件。这也许可以解释为什么发生回滚。
更好的解决方案是在锁定状态下设置标题。
#function starts here, locks and counters are defined outside the function
strin = "f"
if strin = "f":
with successlock:
successvalue.value+=1
ctypes.windll.kernel32.SetConsoleTitleW(str(successvalue.value))