gpt4 book ai didi

python - 如何将两个参数传递给 Pool.starmap()?

转载 作者:行者123 更新时间:2023-12-03 12:51:44 28 4
gpt4 key购买 nike

最初,对于我使用的代码,Pool.map 足以对我的代码进行线程化,因为只有一个参数(一个可迭代的)作为参数传入我的函数。现在,我需要将多个参数传递给该函数,但我在使用 Pool.starmap 时遇到了一些问题。

我尝试将 zip 与 Pool.map 一起使用,但无济于事。

这是我当前的代码:

def get_links_on_page(job_title, page_num):
page = requests.get("%s/jobs?q=%s&l=%s%%2C%s&start=%s" % (__SITE_BASE__, job_title.replace(' ', '+'), 'City', 'PROV', str(page_num*25)), verify=False)
print(page.url)
soup = BeautifulSoup(page.content, 'html.parser')

return [link.a.get('href') for link in soup.find_all('div', {'class': 'title'})]


def get_all_links(job_title):
"""
:param: job_title (string): A string representing the job's title
"""

all_links = []
pool = ThreadPool(processes=20)
all_links.extend(pool.starmap(get_links_on_page, (job_title, [i for i in range(1, 5)])))
pool.close()
return all_links

这给了我这样的错误:

TypeError: '<=' not supported between instances of 'list' and 'int'

我还尝试像这样将两个参数作为可迭代对象传递:

def get_all_links(job_title):
all_links = []
pool = ThreadPool(processes=20)
all_links.extend(pool.starmap(get_links_on_page, [job_title, [i for i in range(1, 5)]])) #[func(job_title, 1), func(job_title, 2), func(job_title, 3) ...]
pool.close()
return all_links

这相当于 18 个参数,因此会引发错误。我目前正在阅读这里的文档:

https://docs.python.org/dev/library/multiprocessing.html#multiprocessing.pool.Pool.starmap

但是我在理解语法方面遇到了麻烦..

非常感谢任何帮助!

最佳答案

使用 zip() 您的方向是正确的,您只需要repeat() job_title:

list(zip(itertools.repeat("jobname"), range(1, 5)))
# [('jobname', 1), ('jobname', 2), ('jobname', 3), ('jobname', 4)]

所以对于你的例子:

from itertools import repeat

def get_all_links(job_title, n): # n would be 4 in your example
iterable = zip(repeat(job_title), range(1, n+1))
with ThreadPool(n) as pool:
all_links = pool.starmap(get_links_on_page, iterable)
return all_links

关于python - 如何将两个参数传递给 Pool.starmap()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56562962/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com