Будущее повышение TypeError после ожидания - PullRequest
4 голосов
/ 23 марта 2019

Я пытаюсь оптимизировать дорогостоящую операцию в некотором существующем коде, используя параллельную обработку. Я использовал concurrent.futures, чтобы сделать это в прошлом, но только когда они ничего не возвращали.

На этот раз я хочу упорядочить результаты, но при печати своей коллекции я получаю статус каждого будущего как что-то вроде <Future at 0x... state=finished raised TypeError>. Может кто-нибудь объяснить, что я делаю не так?

import concurrent.futures

with concurrent.futures.ProcessPoolExecutor() as executor:

  def _future(self) -> None:
    print("here")

  futures = []
  for number in list(range(0,100)):
    future = executor.submit(_future)
    futures.append(future)

  finished = concurrent.futures.wait(futures, 5)
  print(finished)

1 Ответ

4 голосов
/ 23 марта 2019

Ваша функция _future принимает один параметр, и все же ваша executor.submit не передает ей аргументов. Вместо этого вы должны передать, например, number в качестве аргумента:

for number in list(range(0,100)):
    future = executor.submit(_future, number)
    futures.append(future)

С другой стороны, поскольку вы называете один параметр _future как self, это означает, что вы намереваетесь сделать его экземпляром класса, и в этом случае вы должны передать ему надлежащий объект экземпляра. в исходном не минимизированном коде.

...