首页 > 解决方案 > 当 python 线程在网络调用(HTTPS)中并且发生上下文切换时会发生什么?

问题描述

我遇到了一个问题,我们编写的多线程下载应用程序有时会出现 408 错误。我们认为这可能是因为用户增加了线程数,这导致了错误。我们认为有可能在网络调用期间,发生上下文切换,导致线程没有发送调用成功所需的所有数据包,并且服务器给出 408 超时错误。这是可能的还是网络调用不依赖于上下文切换。

我们正在使用 python 线程和 pycurl 模块使用 120 个线程下载数据。

标签: pythonmultithreadingpycurl

解决方案


你指的是什么上下文切换?

Pycurl 是一个 C 库 libcurl 的包装器。当任何 libcurl 的方法被调用时,Python 的全局解释器锁就会被释放。Python 运行时可能会在 libcurl 执行客户端处理时或在实际网络 I/O 期间运行自己的线程,但“上下文切换”不会以任何方式附加到网络 I/O。

但是,这不应该影响您的故障排除,因为您应该使用像 tcpdump 这样的数据包捕获工具来记录您的流量并确定当您收到错误时哪一方正在发送什么,以便您可以就可能发生的事情做出一些合理的理论on 而不是猜测。


推荐阅读