[英]Too many open files when using requests package python
我正在使用 Python requests 包向 API 發出大量請求。 然而,在某些時候,我的程序由於“打開的文件太多”而崩潰。 當我明確關閉我的會話時,我真的不知道這是怎么回事。
我使用以下代碼:
import requests
import multiprocessing
import numpy as np
s = requests.session()
s.keep_alive = False
def request(i, mapId, minx, maxx, miny, maxy):
print(i)
try:
with requests.Session() as s:
r = s.post(
url + "metadata/polygons",
timeout=10,
json={
"mapId": mapId,
"layer": "percelen",
"xMin": minx,
"xMax": maxx,
"yMin": miny,
"yMax": maxy,
},
)
out = r.json()
s.close()
except:
print("something went wrong with: " + str(i))
for i in np.aragne(10000):
time.sleep(1)
multiprocessing.Process(target=request, args=argsList[i])
任何幫助或見解將不勝感激,因為我沒有想法。
“打開的文件太多”可能是指每個Session
及其單個 POST 請求占用 TCP 套接字並因此占用文件描述符這一事實。
第一個解決方案:
使用帶有自定義HTTPAdapter
的單個Session
實例並將增強的參數傳遞給它的pool_connections
參數。
旁注1:您不需要調用s.close()
。 當上下文管理器調用.__exit__()
時,它已經被調用了。
旁注 2:考慮使用threading
或asyncio
/ aiohttp
。 多處理對於像這樣的 IO 綁定任務來說並不理想。
第二種解決方案:
增加允許的打開文件數。 在 Linux 上,您需要執行以下操作:
sudo vim /etc/security/limits.conf
# Add these lines
root soft nofile 100000
root hard nofile 100000
ubuntu soft nofile 100000
ubuntu hard nofile 100000
sudo vim /etc/sysctl.conf
# Add this line
fs.file-max = 2097152
sudo sysctl -p
sudo vim /etc/pam.d/commmon_session
# Add this line
session required pam_limits.so
sudo reboot
我認為第二個解決方案可以描述為“解決症狀而不是問題”,但如果你必須並且感到大膽,請嘗試一下。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.