我正在使用并行 pythonexecutePipeline
多次执行一个大函数 ()。此功能也使用多处理(与multiprocessing
模块)。
我在使用并行 python 模块在控制台上正确显示日志消息时遇到了一些麻烦。当我不使用它时,日志消息会很好地显示。
下面是它的工作原理。我有一个服务器,它每次收到来自客户端的请求时都会调用一个工作人员:
job = self.server.job_server.submit(func = executeWorker, args = (config, ) )
每次有来自客户端的新请求时,都会从新线程执行此函数。然后工作人员正在调用executePipeline
使用多处理执行不同进程的函数。
SocketServer.TCPServer
我使用线程的服务器。我使用根记录器在我的服务器中设置了一个记录器,如下所示:
self.logger = logging.getLogger()
self.logger.setLevel(logging.INFO)
self.logger.addHandler(logging.StreamHandler()
self.job_server = pp.Server(ncpus = 8) # for test
self.jobs = []
当我运行我的服务器时,我只能executePipeline
从子进程而不是子进程获取日志记录。此外,我仅在作业结束时才获得执行管道的日志记录,而不是在运行时。
这里也是工人代码。在我的"Executing pipeline with worker number "
终端中很好地显示
'''
Setup logging
'''
logger = logging.getLogger()
logger.setLevel(logging.INFO)
# worker name
publicIP = socket.gethostbyname(socket.gethostname())
pid = os.getpid()
workerID = unicode(str(publicIP) + ":" + str(pid))
logger.info( "Executing pipeline with worker {}".format(workerID))
res = executePipeline(config)
markedScore = res["marker.score"]
markedDetails = res["marker.detail"]
results = {'marker.detail' : markedDetails , 'marker.score' : markedScore }
return results
有没有一种好方法也可以让日志记录正常工作并查看我的executePipeline
函数的子进程发回了什么?
谢谢你的帮助!
罗曼佐