【发布时间】:2018-11-24 16:15:42
【问题描述】:
我认为这是一个显而易见的问题,但我正在制作一个脚本,它使用线程来测试代理,一旦找到一定数量的代理就应该停止。当我运行它时,如果满足条件,线程将停止生成输出,但程序不会关闭。我看过其他类似的问题,但似乎无法成功实施。不胜感激。
import queue
import threading
import time
import urllib.request
class ThreadUrl(threading.Thread):
def __init__(self, queue, working_proxies):
threading.Thread.__init__(self)
self.queue = queue
self.working_proxies = working_proxies
def run(self):
while len(self.working_proxies)<5:
proxy = self.queue.get()
try:
proxy_handler = urllib.request.ProxyHandler({'http': proxy})
opener = urllib.request.build_opener(proxy_handler)
opener.addheaders = [('User-agent',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36')]
urllib.request.install_opener(opener)
req = urllib.request.Request('http://www.wikipedia.org')
sock=urllib.request.urlopen(req)
print(f'{proxy} works')
with appending_lock:
self.working_proxies.append(proxy)
except urllib.request.HTTPError as e:
print('Error code: ', e.code)
except Exception as detail:
print("ERROR:", detail)
self.queue.task_done()
def main(proxies, working_proxies):
for i in range(5):
t = ThreadUrl(queue,working_proxies)
t.daemon = True
t.start()
for proxy in proxies:
queue.put(proxy)
queue.join()
if __name__ == '__main__':
start = time.time()
appending_lock = threading.Lock()
proxies = [...list of proxies...]
working_proxies = []
queue = queue.Queue()
main(proxies, working_proxies)
print("Elapsed Time: %s" % (time.time() - start))
我是否使用了 daemon 属性错误,或者我应该设置其他参数以确保线程停止?
【问题讨论】:
-
投票关闭,因为实际问题是逻辑错误,而不是对守护线程的误解。
标签: python multithreading proxy urllib