executor.map()
предназначен для сопоставления списка значений с вызовом функции и ожидает итерацию (например, список) в качестве второго аргумента (или количество объектов в качестве независимых аргументов) для сопоставления его содержимого с функцией, предоставленной как первый аргумент.
Например:
executor.map(self.thread_function, self.URLlist)
или
executor.map(self.thread_function, url1, url2, url3, ..., urln)
вызовет thread_function(url)
для каждого значения в URLlist
или каждого аргумента, предоставленного во втором пример.
Это, в свою очередь, означает, что ваша функция thread_function()
должна принять аргумент, чтобы получить значение из списка: thread_function(self, url)
. Поскольку функция теперь получает только одно значение URLlist
за раз, while l oop в вашей функции больше не имеет смысла, и вам нужно реорганизовать эту функцию для обработки только одного URL-адреса вместо списка:
def thread_function(self, url):
webpage = getWebpage(url)
# parse webpage or resource
with self._resourceListLock:
self.resourceDict[url] = webpage
В качестве альтернативы вы можете использовать submit()
вместо map()
, цель которого состоит в том, чтобы просто выполнить функцию асинхронно. Таким образом, модификация thread_function()
не требуется:
executor.submit(self.thread_function)