Первоначально, с кодом, который я использовал, 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
Но у меня возникают проблемы с синтаксисом ..
Любая помощь будет очень признательна!