我对 python 相当陌生,正在制作一个脚本,允许将点云数据从其他程序带入 Autodesk Maya。我的脚本运行良好,但我想做的是让它更快。我有一个 for 循环,它遍历编号文件的列表。即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 坐标,这需要相当长的时间。在一台非常糟糕的计算机上完成一个文件大约需要 30 分钟到 1 小时,任务管理器说 python 只使用 12% 的处理器和大约 1% 的内存,所以如果我可以一次执行多个这些,它会做这 100 个或更多文件的速度要快得多。我认为多线程/排队 for 循环并不难,但我已经迷失了大约一周的时间并尝试了失败的解决方案。
谢谢大家的帮助,我真的很感激,并认为这个网站很棒。这是我的第一篇文章,但我觉得我只是通过阅读这里完全学会了 python。