首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python线程中断睡眠

Python线程中断睡眠
EN

Stack Overflow用户
提问于 2016-08-08 19:55:11
回答 3查看 15.1K关注 0票数 13

在python中,有没有办法在线程休眠时中断它?(就像我们可以在java中做的那样)

我正在找这样的东西。

代码语言:javascript
复制
  import threading
  from time import sleep

  def f():
      print('started')
  try:
      sleep(100)
      print('finished')
  except SleepInterruptedException:
      print('interrupted')

t = threading.Thread(target=f)
t.start()

if input() == 'stop':
    t.interrupt()

线程休眠了100秒,如果我输入'stop',它就会中断

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-08 20:03:55

如何使用condition对象:https://docs.python.org/2/library/threading.html#condition-objects

您可以使用wait(timeout)代替sleep()。要“中断”,您可以调用notify()。

票数 5
EN

Stack Overflow用户

发布于 2017-03-10 13:11:28

正确的方法是使用threading.Event。例如:

代码语言:javascript
复制
import threading

e = threading.Event()
e.wait(timeout=100)   # instead of time.sleep(100)

在另一个线程中,您需要访问e。您可以通过发出以下命令来中断睡眠:

代码语言:javascript
复制
e.set()

这将立即中断睡眠。您可以检查e.wait的返回值,以确定它是否超时或中断。有关详细信息,请参阅文档:https://docs.python.org/3/library/threading.html#event-objects

票数 26
EN

Stack Overflow用户

发布于 2020-12-11 11:05:51

如果您出于某种原因需要使用time.sleep函数,并且碰巧希望time.sleep函数抛出异常,并且您只是想测试较大的休眠值会发生什么情况,而不必等待整个超时时间……

首先,休眠线程是轻量级的,只要让它们在threading.Thread(target=f, daemon=True)的守护程序模式下运行就没有问题(这样当程序退出时,休眠线程就会退出)。您可以使用t.join(0.5)检查线程的结果,而无需等待整个执行过程。

但是,如果您确实需要暂停函数的执行,则可以使用multiprocessing.Process,并在衍生的进程上调用.terminate()。这不会给进程时间来清理(例如,exceptfinally块没有运行),所以要小心使用它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38828578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档