如图,在主进程里边,得到了client对象,并且开启了一个子进程来接收并处理client对象收到的来自客户端的数据,一般情况下,我们会在处理client接受数据的函数里关闭这个套接字就可以了,不需要在主函数里再关闭一次,因为只有一个client对象,但是开启了进程之后,因为子进程是完整地复制主进程的信息,所以,这时候虽然是吧client传值给了子进程,但是此时主进程中也还存在这个client套接字,并且还能够接受信息,我就在这里测试了一下,如图代码,发现主进程会打印一次接收到的数据,而后就会报错,但是子进程仍然会继续获得数据,这就验证了client会有“两份”这一说法,因为我已经在主进程里关闭了client,而子进程仍然能够使用。
开启套接字接收数据多进程
所以,这时候容易出现一个问题,如果还像多线程或者单线程的时候那样在主函数里不关闭client,则会出现程序开启后,主进程会影响子进程的数据接收,如图代码,在主函数里边注释掉client.close()之后,子进程会与主进程无序的交替打印数据,所以会造成程序运行bug。
最近刚刚整理了一下这个小问题,应该是发现的比较晚了,^_^。
关于TCP套接字开启多进程主进程与子进程一个容易忽略的小细节
最新推荐文章于 2023-06-27 18:13:45 发布