多个进程无法正确打印,如何将它们打印到相同的stdscr()?

时间:2019-03-26 13:09:12

标签: python python-3.x multiprocessing python-multiprocessing python-curses

我正在使用一个解压缩应用程序,并且我想使用多个进程从目录中解压缩许多文件,并且我希望有一个屏幕了解每个进程及其解压缩的内容。 我真的是python编程的新手,也是多重处理的新手

当我对该脚本进行编译时,我想查看每个进程的状态,但是只是解压缩了文件,没有任何内容打印到屏幕上,直到脚本完成解压缩并结束为止。 有人可以解释为什么屏幕上没有打印内容吗?

import os, zipfile
from multiprocessing import Process
from unicurses import*
import time
dir_name = 'E:\zips'
extension = ".zip"
processes = 3
os.chdir(dir_name)
def unzipper(item,files,poz,no_proc):
    if(item.endswith(extension)):
        move(no_proc*2,5)
        addstr(f"#{no_proc} -> working on {item}...\n")
        getch()
        file_name = os.path.abspath(item)
        zip_ref = zipfile.ZipFile(file_name)
        zip_ref.extractall(dir_name)
        zip_ref.close()
        move(no_proc*2,5)
        addstr(f"#{no_proc} finised processing {item}.\n")
        if(poz-processes>=0):
            item=files.pop(poz-processes)
            unzipper(item, files,poz-processes,no_proc)
    else:
        os.kill(os.getpid())
if __name__ == '__main__':
    stdscr=initscr()
    print(os.getpid())
    procs = []
    i=0
    list = os.listdir(dir_name)
    files=[]
    for i in range(0,len(list)):
        if(list[i].endswith(extension)):
            files.append(list[i])
    for no_proc in range(0,processes):
        move((no_proc+1)*2,5)
        addstr(f"#{no_proc} -> ")    
    for no_proc in range(0,processes):
        if(files!=[]):
            item=files.pop()
            proc = Process(target=unzipper, args=(item,files,len(files),no_proc+1))
            procs.append(proc)
            proc.start()

    for proc in procs:
        proc.join()

0 个答案:

没有答案