首页 > 解决方案 > 迭代映射函数python中的参数

问题描述

我需要使用 map 在池中为每个线程在字典中迭代一个值。我们的 dict 如下所示:

params = {'skippages': 0, 'pagesize': 1000}

迭代应如下所示:

params["skippages"] += 1

在我们的程序中插入上面的代码行时,它不会更新函数中的参数,当然这是有道理的,因为函数'journal'已经从部分接收到参数,因此它不会更新参数,因此它使用相同的参数运行日志函数。我们如何迭代每个运行日志函数的线程的参数?

def journal(url, headers, params):
    r = requests.get(url=url, headers=headers, params=params)
    print(f'url = {url} | params = {params}')

    return params

if __name__ == '__main__':
    
    url = 'xxx.xxx'
    headers = {'X-AppSecretToken': 'xxx', 'X-AgreementGrantToken': 'xxx', 'Content-Type': "application/json"}
    params = {'skippages': 0, 'pagesize': 1000}

    func = partial(journal, url, headers, params)

    # Ordered thread
    with ThreadPool(15) as p:
        result = p.map(func, [1, 2, 3, 4, 5])
        params["skippages"] += 1 # -----------> doesn't iterate params in journal function

在日志中打印应该而不是输出:params = {'skippages': 0, 'pagesize': 1000}5x 次,那么它实际上应该输出以下内容。我猜它是线程,它不应该遵循函数中的确切顺序,但是线程完成后的结果,由于映射和顺序/队列,预计会遵循该顺序:

url = "https://xxx.xxx/xxx/xxx" | params = {'skippages': 0, 'pagesize': 1000}'
url = "https://xxx.xxx/xxx/xxx" | params = {'skippages': 1, 'pagesize': 1000}'
url = "https://xxx.xxx/xxx/xxx" | params = {'skippages': 2, 'pagesize': 1000}'
url = "https://xxx.xxx/xxx/xxx" | params = {'skippages': 3, 'pagesize': 1000}'
url = "https://xxx.xxx/xxx/xxx" | params = {'skippages': 4, 'pagesize': 1000}'

标签: pythonmultithreading

解决方案


推荐阅读