def main(): # print(sys.version) # スレッドベースの非同期実行 future = ThreadPoolExecutor().submit(f, 'wef') is_feature = isinstance(future, Future) print(is_feature) result = future.result() print(result) is_running = future.running() print(is_running) is_done = future.done() print(is_done) is_cancelled = future.cancelled() print(is_cancelled) # print(download(urls[0])) get_sequentials() get_multi_thread() counter = Counter() threads = 2 with ThreadPoolExecutor() as e: # 2つのスレッドを用意し、それぞれcount_upを呼び出す futures = [e.submit(count_up, counter) for _ in range(threads)] done, not_done = wait(futures) # print(done, not_done) print(f'{counter.count} != 2000000') counter2 = ThreadSafeCounter() threads = 2 with ThreadPoolExecutor() as e: # 2つのスレッドを用意し、それぞれcount_upを呼び出す futures = [e.submit(count_up, counter2) for _ in range(threads)] done, not_done = wait(futures) print(done, not_done) print(f'{counter2.count} == 2000000') with ThreadPoolExecutor(max_workers=3) as e: d = Downloader() futures = [e.submit(d.get(url)) for url in urls] for future in as_completed(futures): # r = future.result() print(future) c = MyClass() c.execute()
from concurrent.futures import (ThreadPoolExecutor, Future) def func(): return 1 if __name__ == '__main__': # 非同期に行いたい処理をsubmitに渡すと、 # その処理の実行がスケジューリングされて # Futureクラスのインスタンスが返される。 # ThreadPoolExecutorはスレッドベースの非同期実行 future = ThreadPoolExecutor().submit(func) print(isinstance(future, Future)) # futureはスケジューリングされた呼び出し可能オブジェクトを # カプセル化したもので、実行が先送りされている事を表現している。 # スケジューリングはconcurrent.futuresモジュールが行う。 # 非同期で実行した処理の戻り値を取得 print(future.result()) # 現在の状態を確認する print(future.done()) print(future.running()) print(future.cancelled())