Python 多处理ctypes.windell.kernel32.SetConsoleItlew计数器问题
我有一个脚本,每当一个进程运行这个函数时,它都会设置一个控制台标题,我是通过根据不同的条件设置一个带有计数器的锁来实现的。因此,如果成功,它将向成功计数器添加+1。当我使用了我的笔记本电脑所拥有的2个以上的内核后,它似乎出了问题,它会开始倒数,倒数第四。我以为设置一个锁可以解决这个问题,但显然不行Python 多处理ctypes.windell.kernel32.SetConsoleItlew计数器问题,python,multiprocessing,ctypes,Python,Multiprocessing,Ctypes,我有一个脚本,每当一个进程运行这个函数时,它都会设置一个控制台标题,我是通过根据不同的条件设置一个带有计数器的锁来实现的。因此,如果成功,它将向成功计数器添加+1。当我使用了我的笔记本电脑所拥有的2个以上的内核后,它似乎出了问题,它会开始倒数,倒数第四。我以为设置一个锁可以解决这个问题,但显然不行 #random code here successlock = Lock() successvalue = Value('i', 0) #function starts here, locks and
#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每次都有不同的值,而且我使用的是多处理池,我的代码运行良好,只是计数器出了问题。即使成功案例无效,您也在设置标题。您还引用了锁外部的
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))