前提・実現したいこと
thread処理内で発生した例外を検知してthreadごと一時停止させたい
発生している問題・エラーメッセージ
except requests.exceptions.ConnectionError: print('接続エラー、待機後再接続します。') logs.append("ERROR"+"\t"+target_url) time.sleep(10) のようにthread内に記述してもsleepされない
該当のソースコード
Python3
1 args = sys.argv 2 if len(args)==2: 3 input_file = args[1] 4 else: 5 input_file ="list.txt" 6 7 keywords_list=["Test"] 8 9 logs= [] 10 urls_404 = [] 11 urls_504 = [] 12 urls_accept = [] 13 14 def check_url(target_url): 15 16 try: 17 req = requests.get(target_url) 18 logs.append(str(req.status_code)+"\t"+target_url) 19 20 if req.status_code == 404: 21 urls_404.append(target_url) 22 23 html = BeautifulSoup(req.text, "html.parser") 24 #print(str(html)) 25 title = html.find("title").text 26 body = html.find("body").text 27 28 for keyword in keywords_list: 29 if keyword in body: 30 urls_accept.append(target_url) 31 break 32 33 elif req.status_code == 504: 34 urls_504.append(target_url) 35 36 elif req.status_code == 200: 37 html = BeautifulSoup(req.text, "html.parser") 38 #print(str(html)) 39 title = html.find("title").text 40 body = html.find("body").text 41 42 for keyword in keywords_list: 43 if keyword in body: 44 urls_accept.append(target_url) 45 break 46 47 except requests.exceptions.ConnectTimeout: 48 print('タイムアウトしました') 49 logs.append("TIMEOUT"+"\t"+target_url) 50 time.sleep(10) 51 52 except requests.exceptions.ConnectionError: 53 print('接続エラー、待機後再接続します。') 54 logs.append("ERROR"+"\t"+target_url) 55 time.sleep(10) 56 57 with open(input_file) as f: 58 urls = f.read().splitlines() 59 60 threads = [] 61 62 for url in urls: 63 thread = Thread(target=check_url, args=(url,)) 64 thread.start() 65 threads.append(thread) 66 67 for thread in threads: 68 thread.join() 69 70 with open("log.txt", "w") as f: 71 f.write("\n".join(logs)) 72 73 with open("404.txt", "w") as f: 74 f.write("\n".join(urls_404)) 75 76 with open("504.txt", "w") as f: 77 f.write("\n".join(urls_504)) 78 79 with open("output.txt", "w") as f: 80 f.write("\n".join(urls_accept))
試したこと
ソースコードに記載してあるようにtime.sleepを例外処理に入れてるんですが止まりません。
補足情報(FW/ツールのバージョンなど)
回答2件
あなたの回答
tips
プレビュー