【问题标题】:Reading multiple files in real time?实时读取多个文件?
【发布时间】:2016-11-30 13:17:16
【问题描述】:

我正在尝试侦听不断更新的日志文件并不断使用这些行。 问题是我有多个文件要听。日志由 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,

【问题讨论】:

  • 也许你想要的是为每个文件创建一个线程并将你定义的 follow() 函数设置为目标函数。
  • @Rawing 我尝试将其应用于我的情况,但我不能很好地理解它。不过谢谢。
  • @theVoid 上面的回复差不多,它对我有用。感谢您的帮助!

标签: python multithreading file-io


【解决方案1】:

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

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()

【讨论】:

    猜你喜欢
    • 2021-10-16
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 2016-12-12
    • 2018-10-11
    • 1970-01-01
    相关资源
    最近更新 更多