首页 > 解决方案 > 进程线程无法感知全局变量的变化

问题描述

我试图测试一些将以标志变量结束的进程线程,但它无法感知标志的变化并继续无限循环。

from multiprocessing import Process, Queue
from time import sleep

flag = 1

def threadTest():
    while 1:
        if flag == 1:
            print('hi')
        else:
            break
        sleep(0.1)


def main():
    global flag
    thread = Process(target=threadTest)
    thread.start()
    sleep(5)
    flag = 0
    thread.join()
    print('thread exit')



if __name__ == "__main__":
    main()

我的全局变量声明有什么问题吗?

标签: pythonpython-3.x

解决方案


您实际上是在创建一个进程,而不是线程。当创建一个新进程时,主进程的状态被“复制”到新进程,它现在独立于主进程。因此,对于该新进程,标志始终为 1。

简单地import threading更改为:

thread = threading.Thread(target=threadTest)

它应该工作。

我还将建议更改flag为布尔值,因为它用作循环的条件。


推荐阅读