sleep()
函数在给定的秒数内挂起(等待)当前线程的执行。
Python 有一个名为time
的模块,该模块提供了一些有用的函数来处理与时间有关的任务。 其中最流行的函数之一是sleep()
。
sleep()
函数在给定的秒数内暂停当前线程的执行。
示例 1:Python sleep()
1 2 3 4 5 |
<span class="pl-k">import</span> <span class="pl-s1">time</span> <span class="pl-en">print</span>(<span class="pl-s">"Printed immediately."</span>) <span class="pl-s1">time</span>.<span class="pl-en">sleep</span>(<span class="pl-c1">2.4</span>) <span class="pl-en">print</span>(<span class="pl-s">"Printed after 2.4 seconds."</span>) |
该程序的工作原理如下:
- 打印
"Printed immediately"
- 暂停(延迟)执行 2.4 秒。
- 打印
"Printed after 2.4 seconds"
。
从上面的示例中可以看到,sleep()
以浮点数作为参数。
在 Python 3.5 之前,实际的暂停时间可能小于为time()
函数指定的参数。
从 Python 3.5 开始,暂停时间将至少为指定的秒数。
示例 2:Python 创建数字时钟
1 2 3 4 5 6 7 |
<span class="pl-k">import</span> <span class="pl-s1">time</span> <span class="pl-k">while</span> <span class="pl-c1">True</span>: <span class="pl-s1">localtime</span> <span class="pl-c1">=</span> <span class="pl-s1">time</span>.<span class="pl-en">localtime</span>() <span class="pl-s1">result</span> <span class="pl-c1">=</span> <span class="pl-s1">time</span>.<span class="pl-en">strftime</span>(<span class="pl-s">"%I:%M:%S %p"</span>, <span class="pl-s1">localtime</span>) <span class="pl-en">print</span>(<span class="pl-s1">result</span>) <span class="pl-s1">time</span>.<span class="pl-en">sleep</span>(<span class="pl-c1">1</span>) |
在上面的程序中,我们在无限循环内计算并打印了当前本地时间。 然后,程序等待 1 秒钟。 同样,将计算并打印当前本地时间。 这个过程继续进行。
当您运行程序时,输出将类似于:
1 2 3 4 5 6 |
<span class="pl-c1">02</span>:<span class="pl-c1">10</span>:<span class="pl-c1">50</span> <span class="pl-v">PM</span> <span class="pl-c1">02</span>:<span class="pl-c1">10</span>:<span class="pl-c1">51</span> <span class="pl-v">PM</span> <span class="pl-c1">02</span>:<span class="pl-c1">10</span>:<span class="pl-c1">52</span> <span class="pl-v">PM</span> <span class="pl-c1">02</span>:<span class="pl-c1">10</span>:<span class="pl-c1">53</span> <span class="pl-v">PM</span> <span class="pl-c1">02</span>:<span class="pl-c1">10</span>:<span class="pl-c1">54</span> <span class="pl-v">PM</span> ... .. ... |
这是上述程序的稍作修改的更好的版本。
1 2 3 4 5 6 7 8 |
<span class="pl-k">import</span> <span class="pl-s1">time</span> <span class="pl-k">while</span> <span class="pl-c1">True</span>: <span class="pl-s1">localtime</span> <span class="pl-c1">=</span> <span class="pl-s1">time</span>.<span class="pl-en">localtime</span>() <span class="pl-s1">result</span> <span class="pl-c1">=</span> <span class="pl-s1">time</span>.<span class="pl-en">strftime</span>(<span class="pl-s">"%I:%M:%S %p"</span>, <span class="pl-s1">localtime</span>) <span class="pl-en">print</span>(<span class="pl-s1">result</span>, <span class="pl-s1">end</span><span class="pl-c1">=</span><span class="pl-s">""</span>, <span class="pl-s1">flush</span><span class="pl-c1">=</span><span class="pl-c1">True</span>) <span class="pl-en">print</span>(<span class="pl-s">"<span class="pl-cce">\r</span>"</span>, <span class="pl-s1">end</span><span class="pl-c1">=</span><span class="pl-s">""</span>, <span class="pl-s1">flush</span><span class="pl-c1">=</span><span class="pl-c1">True</span>) <span class="pl-s1">time</span>.<span class="pl-en">sleep</span>(<span class="pl-c1">1</span>) |
要了解更多信息,请访问 Python shell 中的数字时钟。
Python 中的多线程
在讨论多线程程序中的sleep()
之前,让我们讨论一下进程和线程。
计算机程序是指令的集合。 流程就是这些指令的执行。
示例 3:Python 多线程
本文上面的所有程序都是单线程程序。 这是一个多线程 Python 程序的示例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<span class="pl-k">import</span> <span class="pl-s1">threading</span> <span class="pl-k">def</span> <span class="pl-en">print_hello_three_times</span>(): <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-en">range</span>(<span class="pl-c1">3</span>): <span class="pl-en">print</span>(<span class="pl-s">"Hello"</span>) <span class="pl-k">def</span> <span class="pl-en">print_hi_three_times</span>(): <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-en">range</span>(<span class="pl-c1">3</span>): <span class="pl-en">print</span>(<span class="pl-s">"Hi"</span>) <span class="pl-s1">t1</span> <span class="pl-c1">=</span> <span class="pl-s1">threading</span>.<span class="pl-v">Thread</span>(<span class="pl-s1">target</span><span class="pl-c1">=</span><span class="pl-s1">print_hello_three_times</span>) <span class="pl-s1">t2</span> <span class="pl-c1">=</span> <span class="pl-s1">threading</span>.<span class="pl-v">Thread</span>(<span class="pl-s1">target</span><span class="pl-c1">=</span><span class="pl-s1">print_hi_three_times</span>) <span class="pl-s1">t1</span>.<span class="pl-en">start</span>() <span class="pl-s1">t2</span>.<span class="pl-en">start</span>() |
当您运行程序时,输出将类似于:
1 2 3 4 5 6 |
<span class="pl-v">Hello</span> <span class="pl-v">Hello</span> <span class="pl-v">Hi</span> <span class="pl-v">Hello</span> <span class="pl-v">Hi</span> <span class="pl-v">Hi</span> |
上面的程序有两个线程t1
和t2
。 这些线程使用t1.start()
和t2.start()
语句运行。
请注意,t1
和t2
同时运行,您可能会获得不同的输出。
访问此页面以了解有关 Python 中的多线程的更多信息。
多线程程序中的time.sleep()
sleep()
函数将当前线程的执行暂停给定的秒数。
对于单线程程序,sleep()
暂停线程和进程的执行。 但是,该函数在多线程程序中挂起线程而不是整个进程。
示例 4:多线程程序中的sleep()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<span class="pl-k">import</span> <span class="pl-s1">threading</span> <span class="pl-k">import</span> <span class="pl-s1">time</span> <span class="pl-k">def</span> <span class="pl-en">print_hello</span>(): <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-en">range</span>(<span class="pl-c1">4</span>): <span class="pl-s1">time</span>.<span class="pl-en">sleep</span>(<span class="pl-c1">0.5</span>) <span class="pl-en">print</span>(<span class="pl-s">"Hello"</span>) <span class="pl-k">def</span> <span class="pl-en">print_hi</span>(): <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-en">range</span>(<span class="pl-c1">4</span>): <span class="pl-s1">time</span>.<span class="pl-en">sleep</span>(<span class="pl-c1">0.7</span>) <span class="pl-en">print</span>(<span class="pl-s">"Hi"</span>) <span class="pl-s1">t1</span> <span class="pl-c1">=</span> <span class="pl-s1">threading</span>.<span class="pl-v">Thread</span>(<span class="pl-s1">target</span><span class="pl-c1">=</span><span class="pl-s1">print_hello</span>) <span class="pl-s1">t2</span> <span class="pl-c1">=</span> <span class="pl-s1">threading</span>.<span class="pl-v">Thread</span>(<span class="pl-s1">target</span><span class="pl-c1">=</span><span class="pl-s1">print_hi</span>) <span class="pl-s1">t1</span>.<span class="pl-en">start</span>() <span class="pl-s1">t2</span>.<span class="pl-en">start</span>() |
上面的程序有两个线程。 我们已经使用time.sleep(0.5)
和time.sleep(0.75)
将这两个线程的执行分别暂停 0.5 秒和 0.7 秒。
推荐阅读: Python time.sleep()
使线程休眠