我有以下导致 Nuke 挂起的代码。基本上,我想做的是从文件系统中获取文件和文件夹的列表,并且我试图通过并行处理来加速它。这在 Nuke 之外非常有效,但正如我之前所说,在 Nuke 中运行它会导致 Nuke 挂起。有没有更好的方法来做到这一点,这将导致 Nuke 不挂起?最好,我想通过 Python 的标准库或与平台无关的包来解决这个问题。但是,如果没有办法做到这一点,那我就可以了。最坏的情况,我将不得不回到不使用并行处理并找到其他优化。
此外,当我在 Nuke 中运行此代码时,我在控制台中收到以下错误:
Unknown units in -c from multiprocessing.forking import main; main()
编码:
#!/bin/env python
import multiprocessing
import os
CPU_COUNT = multiprocessing.cpu_count()
def _threaded_master(root):
in_queue = multiprocessing.JoinableQueue()
folder_queue = multiprocessing.JoinableQueue()
file_queue = multiprocessing.JoinableQueue()
in_queue.put(root)
for _ in xrange(CPU_COUNT):
multiprocessing.Process(target=_threaded_slave, args=(in_queue, folder_queue, file_queue)).start()
in_queue.join()
return {"folders": folder_queue, "files": file_queue}
def _threaded_slave(in_queue, folder_queue, file_queue):
while True:
path_item = in_queue.get()
if os.path.isdir(path_item):
for item in os.listdir(path_item):
path = os.path.join(path_item, item)
in_queue.put(path)
in_queue.task_done()
if __name__ == "__main__":
print _threaded_master(r"/path/to/root")