您当前的位置:首页 > 计算机 > 编程开发 > Python

Python多线程编程的一个掉进去不太容易爬出来的坑

时间:01-02来源:作者:点击数:

为了能更好地理解本文描述的问题和解决方案,首先让我们来看一段代码(左侧)及其运行结果(右侧):

图片

在上面的代码中,使用一个线程每隔1秒钟输出一次当前工作目录,然后在5秒后、8秒后、11秒后分别创建和启动3个新的线程修改当前工作目录,注意第一次修改实际上并没有改变当前工作目录,因为本来就在这个目录中。从结果可以看出,在函数funcChange()对应的线程中修改当前工作目录之后,会影响funcshow()函数对应的线程。

如果使用多进程编程的话,则不会存在这个问题,例如:

图片

那么,这个影响会带来什么问题呢?让我们再看下面的案例,在这个案例中,有ftpServer.py和ftpClient.py两个程序,用来模拟FTP协议的工作原理。在服务器端使用了多线程技术,针对每个客户端创建并启用独立的线程为其服务。

服务端代码:

图片

客户端代码:

图片

这段代码在单客户端在线时表现正常,但是多客户端同时在线时,用户主目录会变得不对,因为在每个客户端对应的线程中执行的os.chdir(home)对所在进程中的所有线程都有效,也就是会影响为其他客户端服务的线程:

图片

结合本文开始两段代码的运行结果可知,上面的代码使用多线程不合适,应该改用多进程,修改后代码如下。

服务端代码,箭头所指处为修改后的代码,省略了中间代码:

图片

客户端代码,红框内是修改后的代码,省略了其他没有改动的代码:

图片

修改后运行结果如图所示:

图片
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门