#python #multiprocessing
Вопрос:
У меня есть этот код, который запускает функцию множественной обработки.
В этом коде функция do_something
спит и печатает данные.
Он действительно спит (хорошо)
но он ничего не печатает (плохо)
Что не так и как это исправить?
Спасибо
Вот код:
import concurrent.futures import time start = time.perf_counter() def do_something(seconds): print(f"Sleeping {seconds} second(s)...") time.sleep(seconds) return f'Done Sleeping...{seconds}' def main(): with concurrent.futures.ProcessPoolExecutor() as executor: secs = [5, 4, 3, 2, 1] results = executor.map(do_something, secs) for result in results: print(result) finish = time.perf_counter() print(f'Finished in {round(finish-start, 2)} second(s)') if __name__ == "__main__": main() else: print("run from import")
Вот мои результаты:
runfile('G:/OneDrive/__PhD/Research/01-BasicModel/43.py', wdir='G:/OneDrive/__PhD/Research/01-BasicModel') Done Sleeping...5 Done Sleeping...4 Done Sleeping...3 Done Sleeping...2 Done Sleeping...1 Finished in 5.24 second(s)
Здесь нет Sleeping {seconds} second(s)...
P.S. ОС = Windows 10 Редактор : Spyder
Ответ №1:
Это побочный эффект вашего редактора. Процессы, по-видимому, не наследуют специальный вывод, который перенаправляется в ваш редактор. Когда я запускаю ваш код из командной строки, я получаю:
run from import run from import run from import run from import Sleeping 1 second(s)... run from import Sleeping 2 second(s)... run from import Sleeping 3 second(s)... run from import Sleeping 4 second(s)... run from import Sleeping 5 second(s)... Done Sleeping...5 Done Sleeping...4 Done Sleeping...3 Done Sleeping...2 Done Sleeping...1 Finished in 5.29 second(s)