在Python *nix中,time.sleep()是否阻塞线程或进程?
它只会休眠线程,除非您的应用程序只有一个线程,在这种情况下,它会休眠线程,实际上也会休眠进程。
python文档sleep()并没有指定这一点,所以我当然可以理解这种混乱!
线程将阻塞,但是进程仍然是活动的。
在单线程应用程序中,这意味着当您睡觉时,一切都被阻塞。在多线程应用程序中,只有显式“休眠”的线程会阻塞,其他线程仍然在进程中运行。
它会阻塞线程。如果你查看Python源代码中的Modules/ timmodule .c,你会看到在对floatsleep()的调用中,睡眠操作的实质部分被封装在Py_BEGIN_ALLOW_THREADS和Py_END_ALLOW_THREADS块中,允许其他线程在当前线程休眠时继续执行。你也可以用一个简单的python程序来测试:
import time
from threading import Thread
class worker(Thread):
def run(self):
for x in xrange(0,11):
print x
time.sleep(1)
class waiter(Thread):
def run(self):
for x in xrange(100,103):
print x
time.sleep(5)
def run():
worker().start()
waiter().start()
这将打印:
>>> thread_test.run()
0
100
>>> 1
2
3
4
5
101
6
7
8
9
10
102
推荐文章
- 滚动或滑动窗口迭代器?
- python的方法找到最大值和它的索引在一个列表?
- 如何读取文件的前N行?
- 如何删除matplotlib中的顶部和右侧轴?
- 解析.py文件,读取AST,修改它,然后写回修改后的源代码
- Visual Studio Code:如何调试Python脚本的参数
- 使用元组/列表等等。从输入vs直接引用类型如list/tuple/etc
- 结合conda环境。Yml和PIP requirements.txt
- 将命名元组转换为字典
- 如何使x轴和y轴的刻度相等呢?
- Numpy在这里函数多个条件
- 在Python中,使用argparse只允许正整数
- 如何排序mongodb与pymongo
- 不可变与可变类型
- 如何从线程捕获异常