我必须处理大约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()