前提・実現したいこと
threadingモジュールで並列処理を行っているのですがそのスレッド内でifが動いたらそのスレッド以外を落としたいです。
スレッド内からメイン処理に移動してデーモンスレッドを落としてといった風にスレッドを移動する作業はすこし遅くなってしまうため使用したくないです。
ついででなのですがもっと負荷を軽くリクエストを早くする方法はありますか?
発生している問題・エラーメッセージ
スレッド内から他のスレッドをすべて落とす方法がわからない
該当のソースコード
python3
1import time 2import json 3import pycurl 4import certifi 5 6def lol(counter, elapsed_time): 7 try: 8 curl = pycurl.Curl() 9 curl.setopt(pycurl.CAINFO, certifi.where()) 10 curl.setopt(pycurl.WRITEFUNCTION, lambda x: None) 11 curl.setopt(pycurl.CONNECTTIMEOUT, 5) 12 curl.setopt(pycurl.URL, 'https://') 13 curl.perform() 14 print(f"Requests: {counter} | Status Code: {curl.getinfo(pycurl.HTTP_CODE)} | R/S: {elapsed_time}", end="\r") 15 if : 16 #ここに他のスレッドを落とす処理を書きたい 17 #他のスレッドを落とした後のここに処理を書きたい 18 curl.close() 19 20 except pycurl.error: 21 pass 22 23start = time.time() 24counter = 0 25for x in iter(int, 1): 26 counter += 1 27 if counter % 50 == 0: 28 elatime = time.time() - start 29 elapsed_time = elatime / counter 30 Thread(target = lol, args = (str(counter), (str(elapsed_time)), )).start() 31 else: 32 elapsed_time = "" 33 Thread(target = lol, args = (str(counter), (str(elapsed_time)), )).start()
試したこと
ifの中に処理を終えた後にos._exit(0)で全スレッドを落とすなどは可能でしたがそうするとifが何度も実行されてしまうため先にifが反応したらスレッドを落としてその下を実行したいです。
メインスレッドに移動してからは遅くなってしまうので行いたくありません。
補足情報(FW/ツールのバージョンなど)
Python 3.9
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/18 09:21