- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最初,对于我使用的代码,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/
我有一个可以并行运行多个查询的函数,但是我在使用 multiprocessing 运行我的函数时遇到了一些麻烦。我有这段代码: def run(args): query, cursor = a
我在尝试使用 multiprocessing.Pool.starmap 时遇到了一个奇怪的错误。重现错误所需的最少代码在这里: from multiprocessing import Pool # I
最初,对于我使用的代码,Pool.map 足以对我的代码进行线程化,因为只有一个参数(一个可迭代的)作为参数传入我的函数。现在,我需要将多个参数传递给该函数,但我在使用 Pool.starmap 时遇
是否有类似于 pools.starmap 的函数可以与字典列表一起使用? 代替 :pools.starmap(func, iterable_of_tuple) 你将会拥有:pools.starmapd
我正在使用多处理pool.starmap函数。我发现一个奇怪的问题。 from multiprocessing import Pool p = multiprocessing.Pool() NODE
我正在尝试一些网页抓取。我正在将包含 URL 的列表传递给 pool.starmap ,但我遇到了参数错误。显示我的代码的简化版本: 有人可以帮我解决这个问题吗?对不起,如果我做了一些愚蠢的事情。 f
我有一个使用多处理库来计算一些东西的程序。大约有 10K 个输入需要计算,每个输入需要 0.2 秒到 10 秒的时间。 我当前的方法使用池: # Inputs signals = [list(s) f
这个starmap示例程序按预期工作: import multiprocessing def main(): pool = multiprocessing.Pool(10) param
假设我有这两种方法来完成相同的任务: from multiprocessing import Pool pool = Pool(4) def func(*args): # do some sl
关于 this post 的第二个答案, 我试过下面的代码 from multiprocessing import Pool import numpy as np from itertools imp
所以我创建了一个多处理列表(特别是 multiprocessing.Pool().starmap())并希望减少其内存大小。名单如下: import sys import numpy as np fr
在回答问题时Clunky calculation of differences between an incrementing set of numbers, is there a more beau
我正在使用 Pool 对我的程序进行多线程处理,使用 starmap 来传递参数。 我被卡住了,因为我似乎无法找到一种方法来传递 kwargs 以及我在 starmap 函数中传递的 zip 数组。
我是一名优秀的程序员,十分优秀!