在Python中,可以使用concurrent.futures
模塊進行并發編程。這個模塊提供了兩種主要的方法來實現并發:ThreadPoolExecutor
和ProcessPoolExecutor
。它們分別使用線程和進程來實現并發執行。
下面是使用ThreadPoolExecutor
進行并發編程的示例:
import concurrent.futures
import requests
def fetch_url(url):
response = requests.get(url)
return response.text
urls = [
'https://www.example.com',
'https://www.google.com',
'https://www.github.com',
# 更多URL...
]
# 使用線程池執行并發請求
with concurrent.futures.ThreadPoolExecutor() as executor:
results = list(executor.map(fetch_url, urls))
print(results)
在這個示例中,我們首先導入concurrent.futures
和requests
模塊。然后定義一個fetch_url
函數,用于發送HTTP請求并返回響應內容。接下來,我們創建一個URL列表,并使用ThreadPoolExecutor
來執行并發請求。最后,我們將結果打印出來。
ProcessPoolExecutor
的使用方式與ThreadPoolExecutor
類似,但它使用進程而不是線程來實現并發執行。這在處理CPU密集型任務時非常有用,因為Python的全局解釋器鎖(GIL)會阻止多線程并行執行CPU密集型任務。在這種情況下,使用進程可以充分利用多核CPU的性能。
這里是一個使用ProcessPoolExecutor
的示例:
import concurrent.futures
import requests
def fetch_url(url):
response = requests.get(url)
return response.text
urls = [
'https://www.example.com',
'https://www.google.com',
'https://www.github.com',
# 更多URL...
]
# 使用進程池執行并發請求
with concurrent.futures.ProcessPoolExecutor() as executor:
results = list(executor.map(fetch_url, urls))
print(results)
在這個示例中,我們只需將ThreadPoolExecutor
替換為ProcessPoolExecutor
即可。其他代碼保持不變。