Я хочу увеличивать переменную счетчика с помощью функции count () каждый раз, когда поток запускает функцию run ().Один и тот же поток вызывает функцию из другого модуля и выводит значение счетчика, которое должно быть назначено каждому потоку.Дело в том, что я получаю странные результаты при печати переменной, вместо получения списка 1, 2, 3 ... я получаю общее количество потоков, которые в данный момент запущены.
Это мой модуль потоков:
import threading
import proxies
threads_list = []
good_counter = 0
run_counter = 0
worker = None
num_threads=10
timeout=10
class Worker(threading.Thread):
def __init__(self, timeout, proxy_list):
threading.Thread.__init__(self)
self.timeout = timeout
self.proxy_list = proxy_list
def run(self):
global good_counter
count()
proxy_ip = proxies.get_proxy(proxies.get_proxylist())
if proxies.is_proxy_good(proxy_ip):
good_count()
save_proxy(proxy_ip)
print('[+] HIT ! - %s' % (proxy_ip))
def set_threads(num_threads, timeout, proxy_list):
for i in range(num_threads):
worker = Worker(timeout, proxies.get_proxylist())
worker.setDaemon(True)
worker.start()
threads_list.append(worker)
def run_loop():
while proxies.proxy_list.qsize() > 0:
set_threads(num_threads, timeout, proxies.get_proxylist())
for item in threads_list:
item.join()
print('[!] Proxylist Qsize < 0 QUITTING ....')
def get_counter():
return run_counter
def count():
global run_counter
run_counter += 1
И это метод is_proxy_good (), который используется в модуле прокси и выводит run_counter всякий раз, когда происходит обработка исключения:
def is_proxy_good(proxy_ip):
try:
r = requests.get('https://www.example.com',proxies=proxy_ip,timeout=15,headers=headers)
if r.status_code is 200:
return True
return False
except requests.exceptions.Timeout:
print('N%d - %s - Proxy Timeout\n' % (threads.get_counter(),proxy_ip))
return False
except requests.exceptions.ProxyError:
print('N%d - %s - Proxy ProxyError\n' % (threads.get_counter(),proxy_ip))
return False
except requests.exceptions.SSLError:
print('N%d - %s - Proxy SSLError\n' % (threads.get_counter(),proxy_ip))
return False
except requests.exceptions.ConnectionError:
print('N%d - %s - Proxy ConnectionError\n' % (threads.get_counter(),proxy_ip))
return False
Вывод:
N10 - {'https': 'https://x.xxx.xx.xxx:1080'} - Proxy ProxyError
N10 - {'https': 'https://x.xxx.xx.xxx:1080'} - Proxy ProxyError
N10 - {'https': 'https://x.xxx.xx.xxx:1080'} - Proxy ProxyError
..............
N20 - {'https': 'https://x.xxx.xx.xxx:1080'} - Proxy ProxyError
N20 - {'https': 'https://x.xxx.xx.xxx:1080'} - Proxy ProxyError
N20 - {'https': 'https://x.xxx.xx.xxx:1080'} - Proxy ProxyError
...........
Почему выводится общее количество потоков из первого потока?Как я должен увеличивать правильный путь, чтобы он печатал возрастающие числа, увеличенные на 1?Спасибо!