我是多处理的新手,无法让这个脚本在多个核心上运行。它工作正常,不会吐出任何错误,但它只使用56核心服务器上2%的CPU ...任何建议或建议将不胜感激!
该脚本的想法是1)找到文件夹中的所有.xml文件并创建列表/队列,然后2)在多个核心上打开Phoenix.exe程序并从列表/队列中使用.xml文件。 我需要它在多处理上工作,因为我有100,000个.xml文件要处理,处理每个文件需要5-20秒。
仅供参考,我使用的是python 2.7.10。
# import modules
import os, sys, multiprocessing, subprocess, fnmatch, Queue
# Set variables
project_folder = r"E:\Source_folder"
phoenix_exe_file = r"C:\Phoenix\Phoenix.exe"
def producer(folder, q):
print "creating list of XMLs"
for root, dirnames, filenames in os.walk(folder):
for filename in fnmatch.filter(filenames,'*.xml'):
q.put(os.path.join(root,filename))
def consumer(q,phoenix_exe_file):
while True:
# Get item
project_file = q.get()
if project_file is None:
break
process = subprocess.Popen([phoenix_exe_file,project_file])
process.wait()
def main():
q = multiprocessing.Queue()
producer(project_folder, q)
cons_process = multiprocessing.Process(target=consumer, args=(q, phoenix_exe_file))
cons_process.start()
cons_process.join()
# Process: Run main
if __name__ == '__main__':
main()
print "completed"