当然,以下是多进程和多线程在Python中的实际应用示例:

多线程实际应用:Web服务器

场景:一个简单的Web服务器需要处理多个客户端的HTTP请求。

代码示例

from http.server import BaseHTTPRequestHandler, HTTPServer
from threading import Thread

class RequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.end_headers()
        self.wfile.write(b'Hello, world!')

def run_server(port):
    server_address = ('', port)
    httpd = HTTPServer(server_address, RequestHandler)
    httpd.serve_forever()

if __name__ == '__main__':
    port = 8000
    t = Thread(target=run_server, args=(port,))
    t.daemon = True
    t.start()
    print(f"Server running on port {port}")

在这个例子中,我们创建了一个多线程的Web服务器,它可以同时处理多个客户端请求。每个请求都在一个新的线程中处理,而主线程继续监听新的请求。

多进程实际应用:图像处理

场景:一个图像处理程序需要对多张图片进行滤镜处理。

代码示例

from multiprocessing import Pool
from PIL import Image, ImageFilter

def apply_filter(image_path):
    image = Image.open(image_path)
    filtered_image = image.filter(ImageFilter.GaussianBlur(5))
    filtered_image.save(image_path.replace('.jpg', '_filtered.jpg'))

if __name__ == '__main__':
    image_paths = ['image1.jpg', 'image2.jpg', 'image3.jpg']
    with Pool(4) as p:  # 使用4个进程
        p.map(apply_filter, image_paths)

在这个例子中,我们使用multiprocessing模块创建了一个进程池,每个进程负责对一张图片应用高斯模糊滤镜。由于图像处理是CPU密集型的,使用多进程可以充分利用多核CPU,加速处理过程。

多线程和多进程结合实际应用:爬虫

场景:一个爬虫程序需要同时从多个网站下载数据。

代码示例

from concurrent.futures import ThreadPoolExecutor
import requests

def fetch_url(url):
    response = requests.get(url)
    return response.text

if __name__ == '__main__':
    urls = ["http://example.com", "http://example.org", "http://example.net"]
    with ThreadPoolExecutor(max_workers=5) as executor:
        futures = [executor.submit(fetch_url, url) for url in urls]
        for future in futures:
            content = future.result()
            print(content)  # 处理下载的内容

在这个例子中,我们使用concurrent.futures.ThreadPoolExecutor创建了一个线程池来并发地从多个网站下载数据。对于每个URL,我们启动一个线程来处理HTTP请求。这个例子展示了如何将多线程用于I/O密集型任务,以提高爬虫的效率。

这些例子展示了多进程和多线程在不同场景下的实际应用,以及它们如何帮助提高程序的性能和响应性。

10-29 12:15