如何处理python中线程结束的事件?

如何处理python中线程结束的事件?,python,multithreading,multiprocessing,curses,Python,Multithreading,Multiprocessing,Curses,假设我正在解析来自几个不同交换的数据,我希望每个额外的交换同时运行,因此我在自己的进程中启动每个交换,但在每个进程中,我希望将输出字符串添加到列表中,然后将该列表返回主列表并将其输出到curses UI。简单版本: def exchange1(): #do stuff #add to output list return output_list def exchange2(): #do stuff #add to output list retu

假设我正在解析来自几个不同交换的数据,我希望每个额外的交换同时运行,因此我在自己的进程中启动每个交换,但在每个进程中,我希望将输出字符串添加到列表中,然后将该列表返回主列表并将其输出到curses UI。简单版本:

def exchange1():
    #do stuff
    #add to output list
    return output_list

def exchange2():
    #do stuff
    #add to output list
    return output_list

output_list = startnewprocess(exchange1)
output_list = startnewprocess(exchange2)

window.getch()
#have it so I can input different options to do stuff while those threads above are running
如何使其中一个进程完成后重新启动


或者,如何使其能够从主函数检索已添加到进程内输出列表中的内容,以便在交换函数内有一个while True:循环,以便将数据输出到进程外的屏幕?

您可以使用
多处理
来执行此操作:

import time
import multiprocessing

def exchange1(q):
    while True:
        time.sleep(2)
        q.put([1, 2, 3, 4, 5])

def exchange2(q):
    while True:
        time.sleep(4)
        q.put([4, 5, 6, 7, 8])

if __name__ == "__main__":
    q = multiprocessing.Queue()
    p1 = multiprocessing.Process(target=exchange1, args=(q,))
    p2 = multiprocessing.Process(target=exchange2, args=(q,))
    p1.start()
    p2.start()
    while True:
        out = q.get()
        print("out is {}".format(out))
输出:

out is [1, 2, 3, 4, 5]
out is [1, 2, 3, 4, 5]
out is [4, 5, 6, 7, 8]
out is [1, 2, 3, 4, 5]
out is [1, 2, 3, 4, 5]
out is [4, 5, 6, 7, 8]
请注意,如果您还想使用
getch
读取中的字符,则必须在父进程的单独线程中侦听从队列返回的数据,并使用curses库中的某些线程安全机制来更新UI:

def waiter(q):
    while True:
        out = q.get()
        print("out is {}".format(out))
        # Update UI in a thread-safe way

if __name__ == "__main__":
    q = multiprocessing.Queue()
    p1 = multiprocessing.Process(target=exchange1, args=(q,))
    p2 = multiprocessing.Process(target=exchange2, args=(q,))
    p1.start()
    p2.start()
    t = threading.Thread(target=waiter, args=(q,))
    t.daemon = True
    t.start()
    while True:
        char = window.getch()
        # Other stuff

你的目标是什么版本的Python?好的,那么我下面的答案应该很好。是的,它工作得非常好,正是我想要的。非常感谢。