[英]time.sleep() function
我只是想了解,如果当我调用 time.sleep(x) 时,运行代码的当前线程会延迟 x 秒。 但是,这会在 x 秒内释放处理器,还是线程将资源保留给自己,并在 x 秒后才开始执行下一行代码。
使用我面临的确切场景进行编辑:
这是我的情况:
class SomeHandler(tornado.websocket.WebSocketHandler)
@tornado.gen.coroutine
def something_async():
time.sleep(5)
return result
def on_message(message):
future = yield something_async(message)
if __name__ == '__main__':
application = tornado.web.Application([
(r'/', SomeHandler),
])
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(8888)
tornado.ioloop.IOLoop.instance().start()
现在,由于这个 Tornado 将是一个单线程服务器,time.sleep(5) 在这种情况下到底做了什么(它会阻塞线程 5 秒,使整个进程同步)还是协程生成一个新线程?
一个例子总是最好的:
#!/usr/bin/env python
# -*- coding: utf-8; py-indent-offset:4 -*-
###############################################################################
from __future__ import (absolute_import, division, print_function)
# unicode_literals)
import threading
import time
def func1():
time.sleep(10)
print('Func1: Out of sleep and returning')
def func2(flag):
while not flag:
time.sleep(1)
print('Func2: looping')
print('Func2: Flag set, leaving')
t1 = threading.Thread(target=func1)
f = list()
t2 = threading.Thread(target=func2, kwargs=dict(flag=f))
t1.start()
t2.start()
t1.join()
f.append(None)
输出:
Func2: looping
Func2: looping
Func2: looping
Func2: looping
Func2: looping
Func2: looping
Func2: looping
Func2: looping
Func2: looping
Func1: Out of sleep and returning
Func2: looping
Func2: Flag set, leaving
从输出中可以明显看出,即使t1
(第一个线程)长时间处于阻塞状态, time.sleep
10
秒,第二个线程t2
运行。
即使完成了t1
,我们仍然可以看到主线程能够append
到列表中,该列表被用作flag
以使t2
了解它必须返回并因此结束。
因此: time.sleep
仅阻塞正在执行该线程的线程。
龙卷风从不为您生成线程。*如果您调用time.sleep,它将在整个睡眠期间阻止整个过程; 没有其他处理继续。 这就是为什么文档说“ time.sleep不应该在协程中使用,因为它正在阻塞”的原因 。 要显式暂停协程并将控制权返回给IOLoop,以便可以进行其他处理:
yield gen.sleep(0.5)
*龙卷风可以生成线程以进行DNS解析,或者在您显式使用ThreadPoolExecutor使任务异步时。 但是您可以在此讨论中忽略这些情况。
你可以使用function里面的代码:
import time
time.sleep(2) # put value here as seconds, 2 is 2 seconds
或者
from time import sleep
sleep(60) # put value here as seconds, 60 is 60 seconds = 1 minute
示例代码:
import time
def function1():
print('function1 is sleeping for 2 seconds...')
time.sleep(2)
count = 0
while True:
if count >= 10:
break
function1()
count=count+1
更多详情请访问: https://docs.python.org/3/library/time.html#time.sleep
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.