Multiprocessing Python 是指使用 Python 的 multiprocessing
库来创建和管理多个进程,以便充分利用多核处理器的性能
-
日志记录(Logging): 使用 Python 的内置
logging
库来记录每个进程的日志。在每个进程中配置一个日志处理器,以便将所有进程的日志写入同一个文件。这样,你可以轻松地查看和分析所有进程的输出。import logging import multiprocessing def worker(): logging.info("Worker started") # Your code here logging.info("Worker finished") if __name__ == "__main__": logging.basicConfig(filename="multiprocessing.log", level=logging.INFO) processes = [] for _ in range(5): p = multiprocessing.Process(target=worker) processes.append(p) p.start() for p in processes: p.join()
-
使用
pdb
进行交互式调试: 在你想要调试的函数中插入pdb.set_trace()
语句。这将会在运行到该语句时暂停程序执行,并打开一个交互式调试会话。你可以使用n
(next)逐步执行代码,使用c
(continue)继续执行直到下一个断点,使用q
(quit)退出调试会话。import multiprocessing import pdb def worker(): print("Worker started") pdb.set_trace() # Add this line to debug the worker function print("Worker finished") if __name__ == "__main__": processes = [] for _ in range(5): p = multiprocessing.Process(target=worker) processes.append(p) p.start() for p in processes: p.join()
-
使用
ipdb
或pdb++
:ipdb
和pdb++
是pdb
的增强版,提供了更多的功能和更好的用户体验。你可以通过pip
安装它们,并在调试时像使用pdb
一样使用它们。import multiprocessing import ipdb # or import pdb++ def worker(): print("Worker started") ipdb.set_trace() # Add this line to debug the worker function print("Worker finished") if __name__ == "__main__": processes = [] for _ in range(5): p = multiprocessing.Process(target=worker) processes.append(p) p.start() for p in processes: p.join()
-
使用
faulthandler
模块:faulthandler
模块可以将 Python 崩溃时的堆栈跟踪信息输出到标准错误流。这对于调试多进程程序中的未捕获异常非常有用。import multiprocessing import faulthandler def worker(): print("Worker started") # Your code here print("Worker finished") if __name__ == "__main__": faulthandler.enable() processes = [] for _ in range(5): p = multiprocessing.Process(target=worker) processes.append(p) p.start() for p in processes: p.join()
请注意,由于全局解释器锁(GIL)的存在,Python 的线程并不能真正地并行执行。但是,多进程可以绕过这个限制,因为每个进程都有自己的解释器和内存空间。因此,在处理 CPU 密集型任务时,使用多进程是一个很好的选择。