python 多进程实例
时间: 2023-08-10 13:55:19 浏览: 194
下面是一个使用Python多进程的简单实例:
```python
import multiprocessing
import time
def task(num):
print(f"进程 {num} 开始")
time.sleep(1)
print(f"进程 {num} 结束")
# 创建多个进程
processes = []
for i in range(5):
p = multiprocessing.Process(target=task, args=(i,))
processes.append(p)
# 启动所有进程
for process in processes:
process.start()
# 等待所有进程执行完毕
for process in processes:
process.join()
print("所有进程执行完毕")
```
以上代码创建了5个进程,每个进程执行task函数,打印进程开始和结束的信息。每个进程执行任务前暂停1秒,以模拟一些耗时操作。主进程通过调用join方法等待所有进程执行完毕,最后输出"所有进程执行完毕"。
与多线程不同的是,多进程可以实现真正的并行执行,因为每个进程拥有独立的Python解释器和内存空间。在某些情况下,多进程可以更好地利用多核处理器的优势。但需要注意的是,创建和管理多个进程的开销比创建和管理多个线程的开销更高。
希望这个多进程的示例能帮助到你!
相关问题
python多进程实例
Python中的多进程模块`multiprocessing`允许你在单台机器上创建并管理多个独立的并发进程。它的基本原理是利用操作系统提供的API,如系统调用fork()来创建新进程。
以下是一个简单的多进程实例:
```python
import multiprocessing
# 定义一个函数作为进程的任务
def worker(name):
print(f"Worker {name} is running.")
if __name__ == "__main__":
# 创建进程池
pool = multiprocessing.Pool(processes=4) # 这里可以指定进程的数量
# 将任务提交给进程池
jobs = [pool.apply_async(worker, args=(i,)) for i in range(5)] # 使用apply_async避免阻塞主线程
# 等待所有任务完成
for job in jobs:
job.get()
# 关闭进程池
pool.close()
pool.join()
```
在这个例子中,我们创建了一个包含4个进程的进程池,然后提交了5个工作到这个池子中。每个worker函数会打印出它的名字,主程序不会等待它们全部执行完就继续往下走。
python多进程爬虫实例
当然,我可以帮你提供一个简单的 Python 多进程爬虫实例。以下是一个基本的示例代码:
```python
import requests
from multiprocessing import Pool
def scrape(url):
try:
response = requests.get(url)
# 在这里写下你想要处理的代码,例如解析 HTML 内容
print(f"成功爬取网页: {url}")
except Exception as e:
print(f"爬取网页失败: {url}, 错误信息: {str(e)}")
if __name__ == "__main__":
# 定义要爬取的链接列表
urls = [
"http://example.com/page1",
"http://example.com/page2",
"http://example.com/page3",
# 添加更多链接...
]
# 设置进程池的大小
pool = Pool(processes=4) # 这里设定为 4 个进程,你可以根据需要进行调整
# 使用进程池来并发爬取网页
pool.map(scrape, urls)
# 关闭进程池
pool.close()
pool.join()
```
在上面的示例中,我们使用了 `multiprocessing.Pool` 来创建一个进程池,并通过 `pool.map` 方法将待爬取的 URL 列表传递给 `scrape` 函数并执行。这样可以实现多个链接的并行爬取。
请注意,上述示例只是一个简单的多进程爬虫框架。你可以根据自己的需求进行扩展和优化。
阅读全文