Попытка понять модуль Concurrent.Futures в Python - PullRequest
5 голосов
/ 10 ноября 2011

Я пытаюсь понять, как использовать модуль concurrent.futures в Python 3.2.2, и играл с примерами из документации.Когда я пытаюсь применить свое понимание, мои собственные примеры терпят неудачу.Я надеюсь, что кто-нибудь может помочь мне встать на путь!

Я хочу иметь возможность настроить ряд процессов, работающих одновременно, но асинхронно.Мои процессы ничего не возвращают.Чтобы смоделировать это, я написал тривиальный пример:

import concurrent.futures

fred = [1,2,3,4,5,6,7,8,9,10]

def f(x):
    print(x * x)

def main():
    with concurrent.futures.ProcessPoolExecutor() as executor:
        for num in fred:
            executor.submit(f, num)

if __name__ == "__main__":
    main()

Этот код работает (на 4-х ядерном Windows XP box) и возвращает:

1 4 9 16 25

... но потом зависает.

Я явно что-то делаю не так.Итак, как правильно запускать процессы Python в пуле процессов?Я не хочу использовать executor.map подход, потому что у меня нет никакой отдачи от моего процесса.

Или ... нужно ли имитировать это, возвращая процессу True или False (или что-то в этом роде)?

Спасибо!

1 Ответ

2 голосов
/ 10 ноября 2011

Я не совсем понимаю, почему вы не хотите использовать executor.map ... Я попробовал это с функцией, которая ничего не возвращала (с вашей функцией f, на самом деле), и она работала нормально. ..

Теперь, когда вы запускаете его с map, он фактически не будет печатать значения, но вот версия вашей функции f, которая действительно печатает значения:

import concurrent.futures

fred = [1,2,3,4,5,6,7,8,9,10]

def f(x):
    return x * x

with concurrent.futures.ProcessPoolExecutor() as executor:
    for num in executor.map(f, fred):
        print(num)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...