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

卡梅伦·罗西尔(Cameron Rosier)

最初,使用我使用的代码,Pool.map足以线程化我的代码,因为只有一个参数(可迭代)作为参数传递给我的函数。现在,我需要将多个参数传递给函数,并且在使用Pool.starmap时遇到了一些麻烦。

我试图在Pool.map旁边使用zip无效。

这是我当前的代码:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Python中使用Pool时将kwargs传递给starmap

如何从Pool.starmap_async()获得结果?

Pool / starmap的Python多处理行为

Python-具有两个参数的多处理StarMap

Python 2.7:如何弥补pool.starmap的缺失?

python multiprocessing pool.starmap不起作用

如何将两个参数传递给webpack?

如何将两个参数传递给webservice

如何使用pool.starmap和zip合并并通过单个元素传递整个列表

如何在带有pool.starmap的某些进程中使用某些参数重复一个函数

multiprocessing.pool.imap是否具有允许多个参数的变体(如starmap)?

我无法让 pool.map 或 pool.starmap 以我认为应该的方式工作

减少用于multiprocessing.Pool.starmap()的列表的内存大小

如何将一个参数传递给argparse,这将影响两个选项?

如何将两个参数传递给下一个ViewController?

我可以在多处理池starmap方法中传递队列对象吗

如何将两个参数作为数据传递给 AJAX?

VueJS如何将两个参数传递给Vuex动作

如何将两个参数传递给salloc的--mail-type选项?

如何将这两个参数传递给控制器的动作方法?

如何将值传递给两个不同的参数

如何将两个或多个参数传递给Button命令?

如何将两个或多个参数传递给 Codeigniter 的默认控制器?

Laravel 5.8:如何将两个参数传递给事件和监听器

如何将两个下拉列表中的两个值或参数传递给ajax?

如何将两个变量传递给视图?

当仅接受一个参数时,如何将两个位置参数传递给unittest.patch?

如何将一个或两个命名向量作为参数传递给dplyr :: recode

如何将两个参数传递给 ASP.NET Core MVC 中的控制器?