私はマルチスレッドスクリプトでスレッドライブラリを使用しています。私はスレッドでタイムアウトを実装したい。スレッドは、指定された時間後にtask_done
を返されていない場合はこのように、それは機能の出てくるはずです。ここでtask_done
python:スレッドの使用、スレッドタイムアウトの適用
を返す私のコードです:work
機能で
def create_workers():
for _ in range(NUMBER_OF_THREADS):
t = threading.Thread(target=work)
t.daemon = True
t.start()
def create_jobs():
for d in Date_set :
queue.put(d)
queue.join()
scrape()
def scrape_page(thread_name, page_url):
print(thread_name + ' now working on ' + page_url)
get_active_urls_perDay(session=s,Date=page_url,County=Cty, courtSystem=CS, PT=P)
def work():
while True:
url = queue.get()
scrape_page(threading.current_thread().name, url)
Date_set.remove(url)
print str(len(Date_set)) + " days more to go!"
print "Number of threads active", threading.activeCount()
queue.task_done()
def scrape():
queued_links = Date_set
if len(queued_links) > 0:
print(str(len(queued_links)) + ' days in the queue')
create_jobs()
、私が欲しいですスレッドのタイムアウトを実装します。 それ以外の場合、コードは正常に実行されますが、返されなかったスレッドはtask_done
でコードを停止し、返されるのを待ちます。
それは働いていますが、1つのスレッドが止まったらすぐにすべてのスレッドとメインプロセスが終了し、コード全体が正常に終了しました... –
ああ!いいえいいえ...あなたのコードは正常に動作しています。ただ1つのスレッドしか停止しませんでしたが、コード全体が一度終了しました。何らかの形でコード全体の終了を止めることはできますか? –
あなたは 'ただ一つのスレッドを止めました 'とはどういう意味ですか?すべての結合がタイムアウトに達すると、コード全体が終了します。 –