Python 多进程调用requests API发送网络请求导致python程序崩溃
描述:
在涉及到multiprocess的python项目中,如果在forked出的process中,调用requests API(i.e. requests.get('...'), 该进程会崩溃。
原因:
根据对代码执行路径的分析,以及issue 和其他网友的记录, 可以判定该bug的出现原因为Mac的libdispatch并不是fork-safe,从而导致在fork出的进程里使用requests出错。
解决方案:
- 在main process里完成requests相关初始化
- 如果确实要在fork出的process里调用requests,那么在调用前,添加以下代码:
os.environ['no_proxy']='*'
来跳过network proxy lookup。

本文描述了在Python多进程环境中使用requests库时遇到的问题及解决办法。主要原因是Mac OS下的libdispatch库与fork操作不兼容,导致子进程中使用requests发送请求时程序崩溃。通过在主进程中初始化requests或设置环境变量跳过网络代理可以解决此问题。
157

被折叠的 条评论
为什么被折叠?



