ProcessPool と ThreadPool を使用して同じアクションを実行するのにかかる時間を確認しようとしています。アクションは、1000 API 呼び出しを行い、JSON オブジェクトを返すことです。これを ThreadPool 経由で実行すると、約 68 秒かかります。しかし、同じことはプロセス プールで 0.2 秒しかかかりません。これは、時間を間違って測定しているのではないかと考えさせられます。これについての考えは役に立ちます。参考までに私のコードを以下に貼り付けます。
def geturl(url):
#print("The process",os.getpid()," is working on this URL")
response=requests.get(url)
data=response.json()
return data['albumId']
# Approach two: Using a Process Pool
t3=time.time()
with concurrent.futures.ProcessPoolExecutor(max_workers=10) as P:
process_futures={P.submit(geturl,url):url for url in urls}
for P_future in concurrent.futures.as_completed(process_futures):
print(P_future.done())
t4=time.time()
print(t4-t3)
# Approach one: Using a Thread Pool
import concurrent.futures
t1=time.time()
with concurrent.futures.ThreadPoolExecutor(max_workers=10) as thread:
thread_futures={thread.submit(geturl,url):url for url in urls}
for future in concurrent.futures.as_completed(thread_futures):
pass
t2=time.time()
print(t2-t1)