ウェブサイトの 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()
編集: domain = domain_q.get() この行は、アイテムがキューで利用可能になるまでブロックします。
これを 300 スレッドで実行すると問題が発生します。負荷平均は問題ないようですが、単純な ls -la には 5 秒かかり、すべてが遅くなります。どこで私は間違えましたか?非同期またはマルチプロセッシングを使用する必要がありますか?