我正在使用 python 线程来解析网站 IP 地址。这是我的解决工作流程。这是一个守护线程。
def get_ip_worker():
"""This is the worker (thread) process for parsing ips, this process takes domain from the q processes it
and then saves it to another q"""
socket.setdefaulttimeout(3)
while True:
domain = domains_q.get()
try:
addr_info = socket.getaddrinfo(domain, 80, 0, 0, socket.SOL_TCP)
for family, socktype, proto, name, ip in addr_info:
if family == 2: #okay it's ipv4
ip, port = ip
processed_q.put((ip, domain))
elif family == 10: #okay it's ipv6
ip, port, no_1, no_2 = ip
processed_q.put((ip, domain))
except:
pass
#print 'Socket Error'
domains_q.task_done()
编辑: domain = domain_q.get() 此行阻塞,直到队列中的项目可用。
当我在 300 个线程上运行它时,问题就来了,平均负载似乎还可以,但简单的 ls -la 需要 5 秒,而且一切都很慢。我哪里做错了?我应该使用异步还是多处理?