不,它不是CPU密集型的。
The documentation說:
暫停爲給定秒數執行。
Python實際上並不能保證在每一個可能的實現中,這意味着OS永遠不會在睡眠期間安排你的進程。但是在每個平臺上,Python都會嘗試在不使用任何CPU的情況下,在指定的時間內執行適當的操作。在某些平臺上,這可能仍然意味着一點點的CPU,但它將盡可能少地合理。
特別是,既然你問關於Linux,想必CPython的:
在Linux上,和大多數其他POSIX平臺上,它通常會使用select
。請參閱the 3.3 source。
man page很明顯,select
掛起,直到信號,超時或就緒I/O(在這種情況下,沒有fds,所以後者是不可能的)。
你可以閱讀內核源代碼的全部細節,但基本上,除非有任何意外的信號,否則根本不會安排任何計劃,除非可能在select
的最開始處有一小部分旋轉(作爲幾乎可以立即返回select
的情況優化)。
在你總結的中間,從問題的變化「是sleep
CPU密集型」向「我要使用sleep
,或cron作業?」
無論哪種方式,您在等待時都不會燃燒任何CPU。有一些優點和缺點,但其中大多數都是微不足道的。從(大致和主觀上)最重要的是至少一個cron作業:
- 允許配置 - 例如,改變計劃 - 無需編輯源代碼。
- 需要配置才能正常工作。
- 意味着更少的代碼 - 意味着更少的錯誤,並且對於未來的讀者而言更少理解。
- 將持續在系統關閉。
- 即使腳本以異常或信號退出,也會再次觸發。
- 如果它的預定時間間隔錯過N次(未指定,並且不同的cron實現做不同的事情),則可以觸發0,1或N次,而不是保證0.
- 有更好的處理機會系統時鐘改變。
- 每次啓動時都必須支付進程啓動,解釋器啓動等。
- 不會浪費頁表和進程表空間,因爲沒有進程正在運行,也沒有內存映射。
標題和問題無關? – Serdalis
@Serdalis:他們不是同一個問題,但他們絕對相關。如果「睡眠」確實忙於等待,那麼幾乎可以解決使用哪一個問題(有利於「不睡眠」)的問題;如果不這樣做,那麼這個問題就會出現。 (當然,事實證明,事實並非如此。) – abarnert