weixin_40005331 2019-10-09 02:21 采纳率: 0%
浏览 169

为什么全局变量在进程中赋值后,线程中接收不到。

global a
a = {}
class Control_system(QMainWindow, Ui_Control_system):
     socketQueue = multiprocessing.Queue()  # 连接队列
     def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)
        self.p1 = multiprocessing.Process(target=Control_system.connect, args=(self.socketQueue,))
        self.p1.start()
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.client)  # 自动传入数据
        self.timer.start(1000)

    @staticmethod
    def connect(queue):
        ip_port = ("192.168.1.251", 8880)
        s = socketserver.ThreadingTCPServer(ip_port, MyServer)
        s.serve_forever()

     def client(self):
         print(a)
# 这里的a还是空值

class MyServer(socketserver.BaseRequestHandler):

    def handle(self):
        print("conn is :", self.request)  # conn
        print("addr is :", self.client_address)  # addr

        a[self.client_address] = self.request
        print("a:",a)
# 这里的a是有值的

if __name__ == '__main__':

    if not QApplication.instance():
        app = QApplication(sys.argv)
    else:
        app = QApplication.instance() 

    w = Control_system()
    w.show()


    sys.exit(app.exec())

  • 写回答

1条回答 默认 最新

  • 憧憬blog 2023-03-15 05:21
    关注

    在多进程程序中,每个进程都有自己的地址空间,全局变量也是每个进程独立维护的,因此在一个进程中将全局变量赋值后,在其他进程或线程中是看不到这个赋值的。在你的代码中,a是一个全局变量,在MyServer进程中对它进行了赋值操作,但在Control_system进程中的client函数中访问a仍然是空值,因为它们处于不同的进程中。

    如果你想让Control_system进程中的client函数也能访问到a的赋值,有几种解决方案:

    1. a存储到一个共享的内存中,比如使用multiprocessing.Manager来创建一个共享的字典,让各个进程可以共享和访问。

    2. MyServer进程中,将a的值发送给Control_system进程,比如通过进程间通信(IPC,如使用multiprocessing.Pipemultiprocessing.Queue)或网络通信(如使用socket)等方式。

    具体如何实现,可以根据实际情况选择合适的方法。

    评论

报告相同问题?

悬赏问题

  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划