Сделайте так, чтобы две функции выполнялись параллельно, выводите данные на разные строки

#python #multiprocessing

Вопрос:

Я пытаюсь создать какие-то функции, которые работают параллельно с многопроцессорной обработкой из python. Сценарий выглядит так:

 from multiprocessing import Process
def func1():
    for x in range(0,10000000):
          print(x, end = 'r')
def func2():
    for x in range(10000000,20000000):
          print(x, end ='r')
if __name__ == '__main__':
  p1 = Process(target=func1)
  p1.start()
  p2 = Process(target=func2)
  p2.start()
  p1.join()
  p2.join()
 

Однако затем я запускаю этот скрипт, и func1, и func2 переопределяют вывод друг друга в одной строке, но не в отдельных строках. Кто-нибудь знает, как решить эту проблему?

Комментарии:

1. Почему r это ? Вы работаете в Windows?

2. это может быть большой проблемой. Некоторые консоли/терминалы могут иметь специальные коды для перемещения курсора, и вы можете добавить их в строку, чтобы переместить текст в нужное место. Но если консоль не использует коды, то вы не сможете ее решить. Вы можете проверить проклятия или аналогичные модули

3. @drum да, я запускаю его в Windows

4. Попробуйте rn вместо этого или полностью избавьтесь от этого

5. @ArtiomKozyrev sr Я заболел несколько дней назад. Я пробую твой и Бубу метод

Ответ №1:

Обычно при печати выходные данные буферизуются, но если аргумент ключевого слова flush True равен , поток принудительно сбрасывается. Это должно значительно помочь. И нет необходимости указывать конечный аргумент; по print умолчанию функция будет использовать правильные коды для создания новой строки:

 print(x, flush=True)
 

Комментарии:

1. flush=True не работает, вывод по-прежнему заливает экран