我正在使用python线程来解析网站IP地址。这是我解决问题的工作流程。这是一个守护线程。Python线程似乎冻结了机器
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()
编辑:域= domains_q.get()这条线块,直到产品在队列可用。
问题是当我在300个线程运行此,平均负载似乎不错,但简单的LS -la需要5秒,一切都是缓慢的。我哪里做错了?我应该使用异步还是多处理?
你确定空队列异常被打破循环? – andsoa 2013-03-11 15:39:42
domains_q.get()此行会阻止,直到某个项目可用,我已将其添加到帖子中。 – nacholibre 2013-03-11 15:45:35