Я просто пытаюсь понять, что если при вызове time.sleep (x) текущий поток, который запускает код, задерживается на х секунд. Но это освобождает процессор за эти x секунд или поток поддерживает ресурсы самостоятельно, и через х секунд он просто начинает выполнять следующие строки кода.time.sleep() function
Редактирование с точным сценарием я столкнулся:
Вот так со мной:
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 секунд, делая весь процесс синхронным), или сопрограмма порождает новый поток?
Будет ли иметь смысл запускать процессор и предотвращать выполнение любого другого потока? Может быть, вы можете это выяснить? –
Возможно, это может вам помочь: http://stackoverflow.com/questions/92928/time-sleep-sleeps-thread-or-process – Querenker
Простой ответ заключается в том, что он освободит процессор, но реализация может отличаться. Существует функция, известная как «блокировка спина» *, при которой поток сохраняет CPU, если ожидание находится на короткое время. Вполне возможно, что реализация может использовать блокировку спина для короткого времени сна, особенно в Windows, где для этого есть API. См. Также http://stackoverflow.com/questions/7273474/behavior-of-pythons-time-sleep0-under-linux-does-it-cause-a-context-switch и http://stackoverflow.com/questions/ 22115831/how-to-resolve-spinlock-issues-with-multithread-python – cdarke