当子进程在 Python 中写入 curses window 时输出错误

Bad output when child processes writes into curses window in Python

我需要你的建议。我必须制作一个 python 程序,它将有一个用 curses 模块编程的用户界面,几个子进程应该写入一个由 curses 创建的 window 我有这个代码:

#!/bin/python3

import multiprocessing
import curses
import time


class GUI:

    def __init__(self):
        self.lock = multiprocessing.Lock()
        self.window = curses.initscr()
        self.window.erase()
        self.window.refresh()

    def worker(self, i, msg):
        self.lock.acquire()
        try:
            self.window.addstr(i, 0, msg + "\n")
            self.window.refresh()
        finally:
            self.lock.release()

    def work_hub(self):

        jobs = []
        for i in range(5):
            child = multiprocessing.Process(target=self.worker, args=(i, "Worker" + str(i)))
            jobs.append(child)
            child.start()

        for job in jobs:
            job.join()

        time.sleep(5)
        curses.endwin()


if __name__ == "__main__":

    displayer = GUI()
    displayer.work_hub()

但我的输出是这样的:

Worker0

Worker1


Worker2



Worker3




Worker4

我需要这个输出:

Worker0
Worker1
Worker2
Worker3
Worker4

请帮帮我。我几乎尝试了我所知道的一切。 谢谢。

它没有按预期工作,因为 multiprocessing 创建了单独的子进程,这些子进程不知道其他子进程在屏幕上的什么位置离开了光标。您可以通过将消息后的光标移动到每个子进程中的相同位置(进行额外的刷新)来解决这个问题。 worker 函数中的类似内容:

      self.window.addstr(i, 0, msg)
      self.window.refresh()
      self.window.move(10, 0)
      self.window.refresh()