多线程:进度条和实时日志记录

时间:2018-11-09 13:01:13

标签: multithreading python-2.7 logging progress-bar

我必须处理大约45,000件物品,一个核心需要大约4个小时。

我想要

  • 进度条,用于检查过程是否正在进行
  • 在进程运行时记录错误,如果我发现运行不正常,最终将其停止。

我最好的解决方案是显示一个进度条,但仅在流程结束时才打印日志。它涉及到我的函数返回一个字符串(日志行)并在获取所有结果后打印返回的行。真正的工作会创建文件。

我知道我在流程的最后获得了所有日志行,因为我在遍历日志行之前先建立了结果列表(因此结束了流程)。但是由于我不习惯多线程,所以看不到如何实现我的目标。

from multiprocessing import Pool
from tqdm import tqdm


def thread_safe_function(arg):
    # do things
    return log_line


if __name__ == '__main__':
    for log in list(tqdm(pool.imap(thread_safe_function, input_list), total=len(pronunciation_models))):
            print log

我想正确的解决方案是使我的核心功能能够打印日志,但是我没有运气尝试它。我相信我的程序创建的线程没有与父进程共享stdout(因此将日志打印到我无法读取的位置),或者我滥用了Lock进行多处理。

def thread_safe_function(lock, arg):
    # do things
    if error:
        lock.acquire()
        print error
        lock.release()

0 个答案:

没有答案