首页 > 解决方案 > Python多处理迭代列表

问题描述

我正在使用python 2.7.5(目前无法升级):)这是我的多处理代码,一切都在同一个python脚本中:

def get_data(self, data):
    pool = Pool(processes=8)
    data_to_add = list()
    print("Gathering data")
    for machine in data:
        data_to_add.extend(pool.map(create_doc_struct, [machine]))
    pool.close()
    return data_to_add

这是 create_doc_struct 函数:

def create_doc_struct(_machine):
    from multiprocessing import Pool
    export_json = my_class.get_collection(my_class.export_collection).find({})
for exported_data in export_json:
    if _machine["Hostname"] == exported_data["name"]:
        d = {
            "hostname": _machine["Hostname"],
            "server": exported_data["Server"]
        }
        return d

当我运行脚本时,似乎产生了 8 个线程,但是当我使用一个线程或 8 个线程运行时,脚本运行时间是相同的。

我尝试添加更多 vCPU(当前为 16 个)和 RAM(64 GB),但完成运行仍需要相同的时间。

对我来说,多处理代码似乎不起作用或只有一个线程正在运行此功能。有时它在运行过程中似乎也变慢了。

我的代码中是否缺少某些内容?我该如何解决这个问题?

标签: pythonpython-multiprocessing

解决方案


推荐阅读