实时读取多个文件?

时间:2016-07-26 18:38:30

标签: python multithreading file-io

我正在尝试监听不断更新的日志文件并持续使用这些行。 问题是我有多个文件可供收听。日志由jboss实例分隔,我必须将它们一起使用以将它们插入到数据库中。

我有一个很好的例子,说明如何从问题5419888连续读取文件,但这段代码只能按时间读取一个文件。我已经尝试了以下代码来读取所有代码,但它只会侦听它在文件数组中找到的第一个文件。

我怎么能多线程来同时处理所有文件?

import time
from glob import glob

def follow(thefile):
    thefile.seek(0,2)
    while True:
        line = thefile.readline()
        if not line:
            time.sleep(0.1)
            continue
        yield line



if __name__ == '__main__':
    for log in glob("/logs/xxx/production/jboss/yyy*/xxx-production-zzzz*/xxx-production-zzzz*-xxx-Metrics.log"):
        logfile = open(log, "r")
        loglines = follow(logfile)

        for line in loglines:
            print line,

1 个答案:

答案 0 :(得分:2)

您可以使用以下代码同时打印每个文件的行:

lock = threading.Lock()

def printFile(logfile):
    loglines = follow(logfile)
    for line in loglines:
        #only one thread at a time can print to the user
        lock.acquire()
        print line
        lock.release()



if __name__ == '__main__':
    for log in glob("/logs/xxx/production/jboss/yyy*/xxx-production-zzzz*/xxx-production-zzzz*-xxx-Metrics.log"):
        logfile = open(log, "r")
        t = threading.Thread(target = printFile,args = (logfile,))
        t.start()