python多处理脚本不在多个核心上工作

时间:2018-06-13 23:22:39

标签: python-2.7 subprocess python-multiprocessing popen

我是多处理的新手,无法让这个脚本在多个核心上运行。它工作正常,不会吐出任何错误,但它只使用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"

0 个答案:

没有答案