Я написал многопоточный веб-сканер под Windows.Библиотеки, которые я использовал, были requests
и threading
.Я обнаружил, что программа стала работать медленнее и медленнее после некоторого времени работы (около 500 страниц).Когда я останавливаю программу и снова запускаю, программа снова ускоряется.Кажется, что есть много ожидающих соединений, что вызывает замедление.Как мне решить проблему?
Мой код:
import requests, threading,queue
req = requests.Session()
urlQueue = queue.Queue()
pageList = []
urlList = [url1,url2,....url500]
[urlQueue.put(i) for i in urlList]
def parse(urlQueue):
try:
url = urlQueue.get_nowait()
except:
break
try:
page = req.get(url)
pageList.append(page)
except:
continue
if __name__ == '__main__':
threadNum = 4
threadList = []
for i in threadNum:
t = threading.Thread(target=(parse),args=(urlQueue,))
threadList.append(t)
for thread in threadList:
thread.start()
for thread in threadList:
thread.join()
Я искал проблему.Ответ сказал, что это проблема повторного использования и переработки TCP под Linux.Я не очень хорошо понимаю этот ответ.Ответ ниже.Я перевел ответ с китайского.
- Введите команду в оболочке Linux:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
- Найдено
TIME_WAIT
почти 2 Вт.Таким образом, должно быть много TCP-соединений. - Используйте следующий код для установки времени повторного использования и перезапуска соответственно TCP:
echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
, echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
Этот ответкажется правильным.Это должна быть проблема с сетью.Как мне решить эту проблему под Windows.