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。