python - 当 python 线程在网络调用(HTTPS)中并且发生上下文切换时会发生什么?
问题描述
我遇到了一个问题,我们编写的多线程下载应用程序有时会出现 408 错误。我们认为这可能是因为用户增加了线程数,这导致了错误。我们认为有可能在网络调用期间,发生上下文切换,导致线程没有发送调用成功所需的所有数据包,并且服务器给出 408 超时错误。这是可能的还是网络调用不依赖于上下文切换。
我们正在使用 python 线程和 pycurl 模块使用 120 个线程下载数据。
解决方案
你指的是什么上下文切换?
Pycurl 是一个 C 库 libcurl 的包装器。当任何 libcurl 的方法被调用时,Python 的全局解释器锁就会被释放。Python 运行时可能会在 libcurl 执行客户端处理时或在实际网络 I/O 期间运行自己的线程,但“上下文切换”不会以任何方式附加到网络 I/O。
但是,这不应该影响您的故障排除,因为您应该使用像 tcpdump 这样的数据包捕获工具来记录您的流量并确定当您收到错误时哪一方正在发送什么,以便您可以就可能发生的事情做出一些合理的理论on 而不是猜测。
推荐阅读
- apache-spark - CSV 文件是否分区和并行化乘法?
- ios - 如何创建具有动态标签数量的自定义 UITableViewCell
- reactjs - 我在哪里可以使用 React/Redux 设置我的代码逻辑
- node.js - node-rdkafka 没有安装在本地 Windows 系统以及远程 linux 服务器中
- node.js - 如何在mongodb url中动态更改主机和端口
- reactjs - 当用户在 ReactJS 的 ConfirmAlert 插件中单击是或否时如何调用函数
- node.js - valueMap() 和 mapsValue() 的区别?
- big-o - 如何找到嵌套循环的大 0
- c# - 为什么 asp.net core 无法反序列化这个 json?
- css - 如何在垂直导航栏中创建子导航