Зависает многопоточная программа на 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)

Ответы (0 шт):