我对 python 相当陌生,正在制作一个脚本,允许将其他程序的点云数据引入 Autodesk Maya。我的脚本运行良好,但我想做的是让它更快。我有一个 for 循环,它遍历编号文件的列表。 IE。 datafile001.txt、datafile002.txt 等。我想知道是否有一种方法可以让它一次执行多个操作,可能使用线程或队列?下面是我一直在研究的代码:
def threadedFuntion(args):
if len(sourceFiles) > 3:
for count, item in enumerate(sourceFiles):
t1=Thread(target=convertPcToPdc,args=(sourceFiles[filenumber1], particlesName, startframe, endframe, pdcIncrements, outputDirectory, variableFolder, acceptableArrayforms, dataType))
t1.start()
t2=Thread(target=convertPcToPdc,args=(sourceFiles[filenumber2], particlesName, startframe, endframe, pdcIncrements, outputDirectory, variableFolder, acceptableArrayforms, dataType))
t2.start()
t3=Thread(target=convertPcToPdc,args=(sourceFiles[filenumber3], particlesName, startframe, endframe, pdcIncrements, outputDirectory, variableFolder, acceptableArrayforms, dataType))
t3.start()
t4=Thread(target=convertPcToPdc,args=(sourceFiles[filenumber4], particlesName, startframe, endframe, pdcIncrements, outputDirectory, variableFolder, acceptableArrayforms, dataType))
t4.start()
由于多种原因,这显然不起作用,首先它只会创建 4 个线程,我希望能够提供更多或更少的选项。其次它会出错,因为它试图重用线程?就像我说的,我对 python 很陌生,而且有点不知所措,我已经阅读了这里的几篇文章,但无法让其中一篇正常工作。我认为队列可能是我需要的东西,但无法完全弄清楚,我尝试了条件语句和连接语句,但再次无法得到我想要的。
我想更具体地说,我想要实现的是该函数正在读取文本文件,检索坐标,然后将它们导出为二进制文件以供 Maya 读取。这些文本文件之一通常具有 5-1000 万个 x、y、z 坐标,这需要相当长的时间。在一台相当糟糕的计算机上完成 1 个文件大约需要 30 分钟到 1 小时,任务管理器说 python 只使用 12% 的处理器和大约 1% 的内存,所以如果我可以一次完成其中多个文件,那么就可以完成这 100 个或文件越多,速度就越快。我不认为多线程/排队 for 循环会很困难,但我已经迷失并尝试了大约一周的失败解决方案。
谢谢大家的帮助,我真的很感激,并认为这个网站很棒。这是我的第一篇文章,但我觉得读到这里我已经完全学会了Python。