多处理,Pool.map()

时间:2017-10-16 15:03:04

标签: python python-3.x python-multiprocessing

我不明白它是如何运作的。我的功能 log_in 有两个参数用户密码。并使用我的所有用户和密码列出。因此,当我使用 p.map(log_in,list)时,这意味着列表将迭代并“解包”。其中['user','bitnami'],['user1','12345']等参数将为 log_in 用户 ,的 密码 )。 是

def log_in(user, password):
        payload = wrap_creds_in_xml(username=user, password=password)
        response = requests.post(TARGET_URL, payload)

if __name__ == '__main__':
    TARGET_URL = 'http://192.168.1.6/wp-login.php'
    list = [['user', 'bitnami'], ['user1', '12345'],
            ['user2', '54321'], ['user3', 'qwerty']]
    p = Pool(5)
    p.map(log_in, list)

我有错误

  

TypeError:main()缺少1个必需的位置参数:'password'

1 个答案:

答案 0 :(得分:6)

问题是log_in是一个带有两个参数的函数,但是你的代码只向该函数传递一个参数:一个包含两个元素的列表。请尝试使用Pool.starmap代替Pool.map

p.starmap(log_in, list)

来自Pool.starmap()的文档:

  

map()类似,只是期望迭代的元素   被解压缩为参数的迭代。

     

因此,[(1,2), (3, 4)]的可迭代结果为[func(1,2), func(3,4)]