私は、time.sleep(x)を呼び出すと、コードを実行している現在のスレッドがx秒遅れることを理解しようとしています。しかし、それはx秒間プロセッサを解放するか、スレッドがリソースをそれ自体に保持し、x秒後に次のコード行の実行を開始します。私が直面しています正確なシナリオとtime.sleep()function
編集:
ここで私の場合です:このトルネードは正確にtime.sleep(5)何シングルスレッドのサーバになりますので、今
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()
この場合(5秒間スレッドをブロックしてプロセス全体を同期させますか)、またはコルーチンが新しいスレッドを生成しますか?
CPUを奪い、他のスレッドが実行されないようにするのは理にかなっていますか?おそらくあなたが見つけることができる方法はありますか? –
おそらく、これはあなたを助けることができます:http://stackoverflow.com/questions/92928/time-sleep-sleeps-thread-or-process – Querenker
単純な答えは、プロセッサを解放しますが、実装が異なる場合があります。待機時間が短くてもスレッドがCPUを保持する*スピンロック*と呼ばれる機能があります。具体的なAPIがあるWindowsでは、短いスリープ時間にスピンロックを使用することが考えられます。 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-multithreaded-python – cdarke