我需要你的建议。我必须创建一个python程序,它将使用curses模块编写用户界面,并且几个子进程应该写入由curses创建的一个窗口 我有这段代码:
#!/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
请帮帮我。我几乎尝试了所知的一切。 谢谢。
答案 0 :(得分:0)
它不能按预期工作,因为multiprocessing
创建了单独的子进程,这些子进程不知道屏幕上其他子进程离开游标的位置。您可以通过将消息后的光标移动到每个子进程中的相同位置(进行额外刷新)来解决此问题。在worker函数中有类似的东西:
self.window.addstr(i, 0, msg)
self.window.refresh()
self.window.move(10, 0)
self.window.refresh()