需要知道我是否可以暂时保留一个线程来继续操作并恢复该线程。
例如:
执行某些操作并且类似于Thread2的Thread1正在执行某些操作并启动两个线程。
如果Thread1失败了某些时候我需要暂停Thread2并继续执行动作,如果动作显示为true,它应该恢复Thread2并运行它离开的代码..
欢迎你的回答!!
答案 0 :(得分:0)
您无法暂停不合作的主题。但是,您可以添加一些合作。如果你的线程是一个循环,你可以用锁来模拟一个停止信号:
foo = threading.Lock()
def thread1():
while True:
with foo:
... do whatever the thread does...
def thread2():
while True:
try:
do whatevet the thread does
except MyHorribleException:
with foo:
... do remedial actions with thread1 "paused"...
需要注意的是,如果thread1长时间持有锁,则thread2会在异常处理中阻塞,直到锁变为可用。根据你的程序逻辑,这可能会造成死锁(thread1保留锁,无法继续,等待thread2修复,但thread2无法获取锁,因为thread1持有它)。
然而,这将保证每当"补救行动"采取,thread1不处理数据。如果您的线程中有快速处理循环并且不需要thread2来修复thread1迭代的持续问题,这可能就足够了。
如果这不合适,那么最好使用多处理,至少在unix平台上。如果你没有创建一个线程而是一个子进程,那么你可以向它发送一个STOP信号,在它的轨道上停止它,当你准备好继续时,你会发送它继续。如果您使用的是Windows,这可能不起作用。
您可能还想考虑重新设计程序逻辑。通常,线程适合于独立处理。如果两个线程需要串联起来,停止并相互继续,那么将这些线程交织成一个可能会更好。