我在python(2.7)中有两个线程。 我在程序开始时启动它们。当它们执行时,我的程序到达终点并退出,在等待解决之前杀死我的两个线程。
我正在试图弄清楚如何在退出之前等待两个线程完成。
def connect_cam(ip, execute_lock):
try:
conn = TelnetConnection.TelnetClient(ip)
execute_lock.acquire()
ExecuteUpdate(conn, ip)
execute_lock.release()
except ValueError:
pass
execute_lock = thread.allocate_lock()
thread.start_new_thread(connect_cam, ( headset_ip, execute_lock ) )
thread.start_new_thread(connect_cam, ( handcam_ip, execute_lock ) )
在.NET中,我会使用像WaitAll()这样的东西,但是我没有在python中找到它。在我的场景中,TelnetClient是一个很长的操作,可能会在超时后导致失败。
答案 0 :(得分:4)
Thread
是Python的线程机制的低级原始接口 - 改为使用threading
。然后,您可以使用threading.join()
来同步线程。
其他线程可以调用线程的join()方法。这阻止了 调用线程直到调用join()方法的线程为止 终止。
答案 1 :(得分:3)
Yoo可以做类似的事情:
import threading
class connect_cam(threading.Thread):
def __init__(self, ip, execute_lock):
threading.Thread.__init__(self)
self.ip = ip
self.execute_lock = execute_lock
def run(self):
try:
conn = TelnetConnection.TelnetClient(self.ip)
self.execute_lock.acquire()
ExecuteUpdate(conn, self.ip)
self.execute_lock.release()
except ValueError:
pass
execute_lock = thread.allocate_lock()
tr1 = connect_cam(headset_ip, execute_lock)
tr2 = connect_cam(handcam_ip, execute_lock)
tr1.start()
tr2.start()
tr1.join()
tr2.join()
使用方法.join(),两个线程(tr1和tr2)将相互等待。
答案 2 :(得分:2)