Зависает многопоточная программа на Python
Написал программу для проверки прокси. При обработке большого количества данных она периодически виснет, сама программа работает, а данные обрабатывать и выводить перестает. Памяти хватает, процессор не загружен на полную. В чем может быть проблема и как ее отладить?
import requests
import urllib.request
import socket
import urllib.error
import json
from multiprocessing import Process, Manager
import multiprocessing
socket.setdefaulttimeout(5)
api_key = 'secret'
url = 'http://secret.com=' + api_key
proxy_list = []
def is_bad_socks_proxy(pip):
try:
pip = "socks5://" + pip
proxies = {'http': pip}
print(pip)
requests.get('http://www.google.com', proxies=proxies)
except Exception as detail:
print("ERROR:", detail)
return True
return False
def multi(current_proxy, good_proxy_list, bad_proxy_list):
if is_bad_socks_proxy(current_proxy['proxy']):
print("Bad Proxy %s" % current_proxy)
bad_proxy_list.append(current_proxy)
else:
print("%s is working" % current_proxy)
good_proxy_list.append(current_proxy)
return proxy_list
if __name__ == '__main__':
multiprocessing.freeze_support()
with urllib.request.urlopen(url) as f:
proxy = f.read().decode('utf-8')
f.close()
proxy = json.loads(proxy)
proxy = proxy['data']
for i in proxy:
print(i['proxy'])
proxy_list.append(i)
proxy_list_len = len(proxy_list)
print(proxy_list_len)
cnt = 0
threads = 200
with Manager() as manager:
bad_proxy_list = manager.list()
good_proxy_list = manager.list()
processes = []
while cnt < proxy_list_len:
for i in range(threads):
p = Process(target=multi, args=(proxy_list[cnt], good_proxy_list, bad_proxy_list))
p.start()
processes.append(p)
cnt += 1
if cnt >= proxy_list_len:
break
print(cnt)
for p in processes:
p.join()
print('Good: ', len(good_proxy_list), good_proxy_list)
print('Bad: ', len(bad_proxy_list), bad_proxy_list)