并行迭代字典以减少处理时间并提高性能

问题描述 投票:1回答:1

我有这样的字典:

{
  "ABC": {
    "Name": "ABC",
    "dates": {
      "2019-12-13": [
        {
          "Status": "P"
        },
        {
          "Status": "A"
        }
      ],
      "2019-12-14": [
        {
          "Status": "P"
        },
        {
          "Status": "A"
        }
      ]
    }
  }
}

我正在这样迭代:

for key, value in result.items()
   for dkey, dvalue in value['dates'].items()
       process(key,value,dkey,dvalue)

def process(key, value, dkey, dvalue):
     ##Processing
     ##Insert into db process data

我们可以迭代该命令吗?并行以获得更好的性能?

python python-3.4
1个回答
0
投票

您可以使用multiprocessing.Pool.map(),因此对值并行运行该方法,可以使用1个参数(更容易),所以只需tuple个值

def process(values):
    key, value, dkey, dvalue = values
    # do your stuff


if __name__ == '__main__':
    todos = [(key, value, dkey, dvalue)
             for key, value in result.items()
             for dkey, dvalue in value['dates'].items()] # all the tuples

    cpu_percent = 0.5 # the number of processors to use = the number of thread
    with mp.Pool(int(mp.cpu_count() * cpu_percent)) as q:
        q.map(process, todos)

但是您的意思是[[插入数据库]]我建议运行一些查询,但是要插入多个元组,10个100个值的插入查询比1000个插入查询要好;)

© www.soinside.com 2019 - 2024. All rights reserved.