Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多处理ctypes.windell.kernel32.SetConsoleItlew计数器问题_Python_Multiprocessing_Ctypes - Fatal编程技术网

Python 多处理ctypes.windell.kernel32.SetConsoleItlew计数器问题

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

我有一个脚本,每当一个进程运行这个函数时,它都会设置一个控制台标题,我是通过根据不同的条件设置一个带有计数器的锁来实现的。因此,如果成功,它将向成功计数器添加+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每次都有不同的值,而且我使用的是多处理池,我的代码运行良好,只是计数器出了问题。

即使成功案例无效,您也在设置标题。您还引用了锁外部的
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))