使用python

时间:2018-01-30 08:18:42

标签: python multithreading python-multithreading

需要知道我是否可以暂时保留一个线程来继续操作并恢复该线程。

例如:

执行某些操作并且类似于Thread2的Thread1正在执行某些操作并启动两个线程。

如果Thread1失败了某些时候我需要暂停Thread2并继续执行动作,如果动作显示为true,它应该恢复Thread2并运行它离开的代码..

欢迎你的回答!!

1 个答案:

答案 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,这可能不起作用。

您可能还想考虑重新设计程序逻辑。通常,线程适合于独立处理。如果两个线程需要串联起来,停止并相互继续,那么将这些线程交织成一个可能会更好。

相关问题