用multiprocessing模块来创建多个进程的简单案例
时间: 2024-03-23 08:43:37 浏览: 58
好的,以下是一个简单的使用multiprocessing模块创建多个进程的案例:
```python
import multiprocessing
def worker(num):
"""每个进程要执行的任务"""
print(f"Worker {num} is working")
if __name__ == '__main__':
# 创建5个进程
for i in range(5):
process = multiprocessing.Process(target=worker, args=(i,))
process.start()
```
在这个案例中,我们定义了一个worker函数作为每个进程要执行的任务,我们使用multiprocessing.Process创建了5个进程,每个进程都会执行worker函数,并且传入不同的参数num。
这个案例只是一个简单的示例,实际上multiprocessing模块还有很多功能,比如进程间通信、进程池等等,可以根据实际需求选择使用。
相关问题
写 multiprocessing模块 Process类、进程间通信、进程池、进程同步、共享内存的实训案例
好的,下面是一个使用 `multiprocessing` 模块实现的基础案例,包括了 Process 类、进程间通信、进程池、进程同步和共享内存等功能:
```python
import multiprocessing
# 定义一个函数,用于向队列中写入数据
def write_data(queue):
for i in range(10):
queue.put(i)
print("write_data finished")
# 定义一个函数,用于从队列中读取数据
def read_data(queue):
while True:
data = queue.get()
if data is None:
break
print("read_data received:", data)
print("read_data finished")
# 定义一个函数,用于计算阶乘
def factorial(n, result_queue):
result = 1
for i in range(1, n+1):
result *= i
result_queue.put(result)
# 定义一个函数,用于加锁
def increment(lock, shared_value):
for i in range(10000):
lock.acquire()
shared_value.value += 1
lock.release()
# 定义一个函数,用于创建进程池
def create_pool():
with multiprocessing.Pool(processes=4) as pool:
results = pool.map_async(factorial, [5, 6, 7, 8])
pool.close()
pool.join()
print(results.get())
if __name__ == '__main__':
# 创建一个队列,用于进程间通信
queue = multiprocessing.Queue()
# 创建两个进程,一个向队列中写入数据,一个从队列中读取数据
p1 = multiprocessing.Process(target=write_data, args=(queue,))
p2 = multiprocessing.Process(target=read_data, args=(queue,))
# 启动进程
p1.start()
p2.start()
# 等待进程结束
p1.join()
queue.put(None)
p2.join()
# 创建一个共享内存,用于多个进程之间共享数据
shared_value = multiprocessing.Value('i', 0)
lock = multiprocessing.Lock()
# 创建多个进程,用于对共享内存进行加锁操作
processes = [multiprocessing.Process(target=increment, args=(lock, shared_value)) for _ in range(4)]
# 启动进程
for process in processes:
process.start()
# 等待进程结束
for process in processes:
process.join()
print("shared_value:", shared_value.value)
# 创建一个进程池,用于计算阶乘
create_pool()
```
这个案例中,我们首先创建了一个队列,用于实现进程间通信,然后创建了两个进程,一个向队列中写入数据,一个从队列中读取数据。接着,我们创建了一个共享内存,用于多个进程之间共享数据,并创建了多个进程,用于对共享内存进行加锁操作。最后,我们创建了一个进程池,用于计算阶乘。这个案例中涉及到了 `Process` 类、队列、共享内存、进程池和进程同步等多个 `multiprocessing` 模块的功能。
Python的multiprocessing模块 案例
当然,我可以为您提供另一个使用Python的multiprocessing模块的案例。下面是一个示例代码,用于并行下载多个网页的内容:
```python
import multiprocessing
import requests
def download_page(url):
response = requests.get(url)
return response.content
if __name__ == '__main__':
# 创建一个包含多个网页链接的列表
urls = [
'https://www.example.com',
'https://www.google.com',
'https://www.github.com',
'https://www.python.org'
]
# 创建一个进程池,最多同时运行4个进程
pool = multiprocessing.Pool(processes=4)
# 使用进程池的map方法并行下载每个网页的内容
results = pool.map(download_page, urls)
# 关闭进程池
pool.close()
pool.join()
# 打印结果
for result in results:
print(len(result))
```
在这个案例中,我们首先定义了一个`download_page`函数,它用于下载给定网页链接的内容。然后,我们创建了一个包含多个网页链接的列表`urls`。接下来,我们使用`multiprocessing.Pool`创建了一个进程池,指定最多同时运行4个进程。然后,我们使用进程池的`map`方法将`download_page`函数应用到每个网页链接上,实现并行下载。最后,我们关闭进程池,并打印每个网页内容的长度。
同样需要注意,在使用`multiprocessing.Pool`时,我们需要将代码放在`if __name__ == '__main__':`条件下。
希望这个案例能帮助到您!如有其他问题,请随时提问。
阅读全文