当前位置: 技术文章>> 100道python面试题之-如何使用Python的multiprocessing模块创建进程?
文章标题:100道python面试题之-如何使用Python的multiprocessing模块创建进程?
在Python中,`multiprocessing`模块允许你并行地运行多个进程。这对于执行CPU密集型任务特别有用,因为Python的全局解释器锁(GIL)会限制多线程在执行CPU密集型任务时的并行性。使用`multiprocessing`模块创建进程的基本步骤如下:
### 1. 导入`multiprocessing`模块
首先,你需要从Python的标准库中导入`multiprocessing`模块。
```python
import multiprocessing
```
### 2. 定义目标函数
你需要定义一个函数,该函数将在新的进程中执行。这个函数将作为新进程的目标。
```python
def worker(num):
"""线程工作函数"""
print(f'Worker: {num}')
```
### 3. 创建`Process`实例
然后,你可以使用`multiprocessing.Process`类来创建进程的实例。你需要将目标函数(以及任何必要的参数)传递给`Process`的构造函数。
```python
if __name__ == '__main__':
# 创建一个Process实例
p = multiprocessing.Process(target=worker, args=(1,))
```
注意:`if __name__ == '__main__':`这一行代码非常关键,它用于防止在Windows上运行时出现无限递归创建进程的问题。
### 4. 启动进程
通过调用`Process`实例的`start()`方法来启动进程。
```python
p.start()
```
### 5. 等待进程完成
如果需要等待进程完成,可以调用`Process`实例的`join()`方法。这将会阻塞当前的主线程,直到调用了`join()`的进程执行完毕。
```python
p.join()
```
### 完整示例
将上述步骤整合到一个完整的示例中:
```python
import multiprocessing
def worker(num):
"""线程工作函数"""
print(f'Worker: {num}')
if __name__ == '__main__':
# 创建一个Process实例
p = multiprocessing.Process(target=worker, args=(1,))
# 启动进程
p.start()
# 等待进程完成
p.join()
print("主程序继续执行")
```
### 注意事项
- 当使用`multiprocessing`模块时,确保你的代码在`if __name__ == '__main__':`块内执行,特别是在Windows系统上。
- 进程之间的数据不是共享的,与线程不同。如果你需要在进程之间共享数据,可以使用`multiprocessing`模块中的`Value`、`Array`、`Manager`等类。
- 进程启动和结束的开销比线程大,因此,对于I/O密集型或等待密集型任务,可以考虑使用`threading`模块。但对于CPU密集型任务,`multiprocessing`模块是更好的选择。