使用multiprocessing pool.apply.async运行循环时的进度检查

时间:2018-10-01 01:55:32

标签: python progress-bar python-multiprocessing

我无处不在,但现在我陷于困境,需要社区的帮助。我不是程序员,在名为Houdini的VFX程序中几乎没有使用python。

使用多处理程序,我正在使用另一个名为hython的程序批量运行任务楔块。

任务创建了n个文件夹,并使用x个文件填充了这些文件夹,每个文件都包含相同数量的文件,例如

/ files / wedge_1 / file1 ... file2 / files / wedge_2 / file1 ... file2

pool决定可以分批运行这些任务的数量。我正在尝试实现一个在我的代码侧面运行的进度条,并每x倍检查一次文件,直到文件总数=所需文件总数。

另一个可能的选择是hython任务已经可以输出一个远程进度报告,但是由于所有内容都一起运行,所以我在终端上打印了几张相同框架的副本,而不会告诉我它们来自哪个循环。 / p>

这是您考虑的代码。

# Importing all needed modules
import multiprocessing
from multiprocessing.pool import ThreadPool
import time, timeit
import os

#My Variables
hou.hipFile.load("/home/tricecold/pythonTest/HoudiniWedger/HoudiniWedger.hiplc") #scene file
wedger =   hou.parm('/obj/geo1/popnet/source_first_input/seed') #wedged parameter
cache = hou.node('/out/cacheme') #runs this node
total_tasks = 10 #Wedge Amount
max_number_processes = 5 #Batch Size
FileRange =  abs(hou.evalParmTuple('/out/cacheme/f')[0] - hou.evalParmTuple('/out/cacheme/f')[1])
target_dir = os.path.dirname(hou.evalParm('/out/cacheme/sopoutput')) + "/"
totals = FileRange * total_tasks

def cacheHoudini(wedge=total_tasks): #houdini task definiton
wedger.set(wedge)
time.sleep(0.1)
cache.render(verbose=False)

def files(wedge=total_tasks): #figure out remaining files
    count = 0
    while (count < totals):
        num = len([name for name in os.listdir(target_dir)])
        count = count + 1
        print (count)


if __name__ == '__main__':

    pool = multiprocessing.Pool(max_number_processes) #define pool size
    #do i need to run my progress function files here  
    for wedge in range(0,total_tasks):
        #or I add function files here, not really sure
        pool.apply_async(cacheHoudini,args=(wedge,)) #run tasks

    pool.close() # After all threads started we close the pool
    pool.join() # And wait until all threads are done

0 个答案:

没有答案