Skip to main content
 首页 » 编程设计

Python 和多处理示例

2025年05月04日9bluestorm

我对多处理完全陌生。我正在尝试更改我的代码以便同时运行其中的一部分。

我有一个巨大的列表,我必须在其中为每个节点调用一个 API。因为 API 是独立的,所以我不需要第一个的结果来继续第二个。所以,我有这段代码:

def xmlpart1(id): 
    ..call the api.. 
    ..retrieve the xml.. 
    ..find the part of xml I want.. 
    return xml_part1 
 
def xmlpart2(id): 
    ..call the api.. 
    ..retrieve the xml.. 
    ..find the part of xml I want.. 
    return xml_part2 
 
def main(index): 
    mylist = [[..,..],[..,..],[..,..],[..,...]] # A huge list of lists with ids I need for calling the APIs 
    myL= mylist[index] c 
    mydic = {} 
    for i in myL:  
       flag1 = xmlpart1(i) 
       flag2 = xmlpart2(i) 
       mydic[flag1] = flag2 
 
   root = "myfilename %s.json" %(str(index)) 
 
   with open(root, "wb") as f: 
        json.dump(mydic,f) 
 
from multiprocessing import Pool 
 
if __name__=='__main__': 
    Pool().map(main, [0,1,2,3]) 

根据此处和聊天中的一些建议,我最终得到了这段代码。问题仍然存在。我在 9:50 运行脚本。在 10:25,第一个文件“myfilename 0.json”出现在我的文件夹中。现在是 11:25,其他文件都没有出现。子列表具有相同的长度并且它们做同样的事情,因此它们需要大约相同的时间。

请您参考如下方法:

这更适合 multiprocessing.Pool() 类。

这是一个简单的例子:

from multiprocessing import Pool 
 
def job(args): 
    """Your job function""" 
 
 
Pool().map(job, inputs) 

地点:

  • inputs 是您的输入列表。每个输入都会传递给作业并在单独的进程中进行处理。

当所有作业都完成后,您会以列表形式返回结果。

multiprocessing.Pool().map 就像 Python 内置的 map() 一样,但是会为您设置一个工作进程池并将每个输入传递给给定的功能。

有关详细信息,请参阅文档:http://docs.python.org/2/library/multiprocessing.html