python 多进程实例
时间: 2023-08-10 11:55:19 浏览: 52
下面是一个使用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 多进程爬虫实例。以下是一个基本的示例代码:
```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` 函数并执行。这样可以实现多个链接的并行爬取。
请注意,上述示例只是一个简单的多进程爬虫框架。你可以根据自己的需求进行扩展和优化。
python 多进程 单例
在Python中,可以使用multiprocessing模块来实现多进程编程。单例模式是一种常见的设计模式,它的目的是确保一个只有一个实例,并提供一个全局访问点。下面是一个使用Python实现单例模式的例子:
```python
import multiprocessing
class Singleton(object):
_instance_lock = multiprocessing.Lock()
def __init__(self):
pass
@classmethod
def instance(cls, *args, **kwargs):
if not hasattr(Singleton, "_instance"):
with cls._instance_lock:
if not hasattr(Singleton, "_instance"):
Singleton._instance = Singleton(*args, **kwargs)
return Singleton._instance
```
上述代码中,我们使用了Python的multiprocessing.Lock()来实现线程安全的单例模式。在instance()方法中,我们首先检查是否已经创建了实例,如果没有,则使用Lock()来确保线程安全地创建实例。如果已经创建了实例,则直接返回该实例。