多进程,Pool.map()

8
我不理解它是如何工作的。我有一个名为log_in的函数,它有两个参数userpassword。还有一个list,其中包含所有用户和密码。因此,当我使用p.map(log_in, list)时,这意味着列表将被迭代并“解包”。其中['user','bitnami'],['user1','12345']等将成为这些参数log_inuserpassword)。是这样吗?
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()缺少一个必需的位置参数: 'password'


该错误提示显示main()函数缺少一个必需的位置参数"password"。

错误信息表明这不是情况... - juanpa.arrivillaga
1个回答

13

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

p.starmap(log_in, list)

Pool.starmap()的文档说明:

类似于 map(),不同之处在于预期可迭代对象的元素是可解包为函数参数的可迭代对象。

因此,一个可迭代对象 [(1,2), (3, 4)] 会产生 [func(1,2), func(3,4)] 的结果。


虽然这对某些情况有效,但不幸的是,Pool.istarmapPool.istarmap_unordered并不存在。 - Asclepius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接