Карта исполнителя не является генератором обработки. - PullRequest
0 голосов
/ 29 марта 2019

Я впервые работаю с concurrent.futures.ProcessPoolExecutor().

Я пытаюсь одновременно обрабатывать данные из итерируемого на всех моих процессорах с Executor.map(). Однако функция, предоставленная этому методу, похоже, не выполняется.

Итерация, с которой я работаю, - это генератор. Я попытался преобразовать генератор в список, прежде чем передать его в Executor.map() с помощью list(), что занимает много времени, но функция обработчика по-прежнему не вызывается.

Я пытался увеличить атрибут chunksize с Executor.map() до 100, но, похоже, это не дало никакого эффекта.

def delete_tickets(tickets):
    print('==> Deleting chunk of tickets')  # never appears in my terminal
    zenpy_client.tickets.delete(tickets)
    return 'success'

# this is a generator with a length of 1,512
tickets = zenpy_client.search(type='ticket', tags=DELETE_WITH_TAG)

with concurrent.futures.ProcessPoolExecutor() as executor:
    # also tried
    # tickets = list(tickets)
    # same result (nothing happens)
    for result in executor.map(delete_tickets, tickets, chunksize=100):
        print(result)

В приведенном выше примере delete_tickets(), по-видимому, никогда не выполняется. Оператор print() в этой функции не отображается в моем терминале, и часть билетов не удаляется.

Спасибо за помощь!

...