python web 项目中多进程写日志
时间: 2023-10-11 11:13:00 浏览: 49
在 Python Web 项目中,多进程写日志需要考虑多个进程同时写入同一个文件的问题。为了避免不同进程之间的写入操作互相干扰,可以使用 Python 标准库中的 `logging` 模块,并将日志输出到不同的文件中。
下面是一个示例代码:
```python
import logging
import multiprocessing
import os
def process_task():
# 设置日志输出格式
log_format = '%(asctime)s %(levelname)s %(processName)s %(message)s'
logging.basicConfig(level=logging.INFO, format=log_format)
# 获取当前进程 ID
process_id = os.getpid()
# 创建一个 FileHandler 对象,并指定日志输出文件
file_handler = logging.FileHandler(f'log_{process_id}.txt')
file_handler.setLevel(logging.INFO)
file_handler.setFormatter(logging.Formatter(log_format))
# 将 FileHandler 添加到 logger 对象中
logger = logging.getLogger()
logger.addHandler(file_handler)
# 写入日志信息
logger.info('This is a log message from process %d.', process_id)
if __name__ == '__main__':
# 创建多个进程
processes = []
for i in range(5):
p = multiprocessing.Process(target=process_task)
processes.append(p)
p.start()
# 等待所有进程完成
for p in processes:
p.join()
```
在上面的代码中,我们首先定义了一个 `process_task` 函数,该函数会在每个进程中被调用。在 `process_task` 函数中,我们首先设置了日志输出的格式,然后获取当前进程 ID,创建了一个 `FileHandler` 对象,并将其添加到 `logger` 对象中。最后,我们使用 `logger` 对象写入了一条日志信息。
在 `__main__` 函数中,我们创建了 5 个进程,并等待所有进程完成。在每个进程中,都会执行 `process_task` 函数,并将日志输出到不同的文件中。
这样,我们就可以在多进程的 Python Web 项目中,实现日志的并发写入了。