如何处理python中线程结束的事件?
假设我正在解析来自几个不同交换的数据,我希望每个额外的交换同时运行,因此我在自己的进程中启动每个交换,但在每个进程中,我希望将输出字符串添加到列表中,然后将该列表返回主列表并将其输出到curses UI。简单版本:如何处理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
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?好的,那么我下面的答案应该很好。是的,它工作得非常好,正是我想要的。非常感谢。