我正在使用“ multiprocessing.Process”启动多个子过程。每个子过程都是相同的python脚本,该脚本实例化Logger并将不同级别写入日志文件。只要是相同的脚本,它就会在每个子进程中使用相同的名称创建Logger。
每个子进程还具有唯一的ID,并记录包括该唯一ID的信息。
我发现该日志文件完全缺少一些ID,即整个子进程都没有日志输出。
试图了解原因。在线搜索花费了几个小时,但未发现任何类似的案例。
任何想法/提示都会有所帮助。
谢谢
答案 0 :(得分:0)
答案在这里
尽管日志记录是线程安全的,并且支持在单个进程中从多个线程登录到单个文件,但是不支持从多个进程向单个文件登录,因为没有标准的方法来序列化对单个进程的访问Python中跨多个进程的文件。如果您需要从多个进程登录到单个文件,执行此操作的一种方法是使所有进程都登录到SocketHandler,并有一个单独的进程来实现一个套接字服务器,该服务器从套接字读取并记录到文件。 (如果愿意,可以在现有进程之一中指定一个线程来执行此功能。)本节将更详细地介绍此方法,并包括一个有效的套接字接收器,可用作您适应于您的起点。自己的应用程序。
如果您正在使用包含多处理模块的最新版本的Python,则可以编写自己的处理程序,该处理程序使用此模块中的Lock类来序列化对进程的文件访问。现有的FileHandler和子类目前不使用多重处理,尽管将来可能会使用。请注意,目前,多处理模块并未在所有平台上都提供工作锁定功能(请参见https://bugs.python.org/issue3770)。
https://docs.python.org/2/howto/logging-cookbook.html#logging-cookbook