python - 进程线程无法感知全局变量的变化
问题描述
我试图测试一些将以标志变量结束的进程线程,但它无法感知标志的变化并继续无限循环。
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()
我的全局变量声明有什么问题吗?
解决方案
您实际上是在创建一个进程,而不是线程。当创建一个新进程时,主进程的状态被“复制”到新进程,它现在独立于主进程。因此,对于该新进程,标志始终为 1。
简单地import threading
更改为:
thread = threading.Thread(target=threadTest)
它应该工作。
我还将建议更改flag
为布尔值,因为它用作循环的条件。
推荐阅读
- sql - 组合行号/主键相同的列
- machine-learning - HTK:了解生成的 .mlf 文件中的分数
- javascript - 何时使用过渡与过渡组
- r - 在列表中存储每列(df)的唯一值
- sql - Impala 从列到行,列名消失
- c++ - R:安装羽毛包时编译错误“ISO C++禁止非const静态成员的类内初始化”
- javascript - 单选按钮未在 ui 中选中,但以编程方式已选中
- java - Springboot弹性搜索健康管理:ConnectException:连接被拒绝
- css - 浏览器如何渲染/应用 CSS
- php - 从提交数组更新表数据会导致所有行因为相同的数据