我无处不在,但现在我陷于困境,需要社区的帮助。我不是程序员,在名为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