python - ThreadPoolExecutor 和利用网络的子进程之间的竞争条件
问题描述
我有一个脚本,它由 2 个进程组成,用于下载和过滤/保存响应:
- 进程 A:使用 4 个线程的 ThreadPoolExecutor 下载 100MB+ 文件
- 进程B:位于a中
while
并通过队列与进程A通信
我遇到的问题是,一旦进程 B 从队列中删除了一个项目,它就会开始过滤固定宽度的响应并写入文件,但在它可以写入文件之前进程 A 会获得控制权。我所说的“控制”是什么意思?好吧,进程 B 写入响应的位置位于网络驱动器上,该驱动器与进程 A 中发生的下载位于同一网络管道上;更糟糕的是,带宽限制为 100Mbps(不是 MBps)。
最终结果是,当执行程序中的一个线程开始接收响应时,进程 A 似乎获得了“网络优先级”(有问题的 Web 服务不允许响应流,因此需要下载)。
通过同一网络下载和写入文件时,有没有办法在不恢复同步处理的情况下防止这种情况?
解决方案
推荐阅读
- swiftui - 是否可以在使用 SceneKit 的 AR-App 中使用 SwiftUI 进行 UI?
- javascript - 开玩笑 - 期待中的 [功能匿名]
- mysql - 手动更改表中的varchar大小后如何同步Flyway迁移文件?
- reactjs - 反应路由器未显示“未找到”页面
- docker - 在并行 buildkit 构建后手动组织 overlay2 docker 层
- java - Jsoup中导入Html文件时出错
- go - 为 webp 文件格式生成缩略图
- oracle - 使用 Oracle 表作为输入参数编写 Oracle 存储过程
- react-native - 不变违规:requireNativeComponent:在 UIManager 中找不到“RCTYouTube”
- awk - 我如何使用 awk grep 最后一组行?