Функция не печатается при многопроцессорной обработке

#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)