คำนำ
ต้องแน่ใจว่าคุณจำเป็นต้องทำงานซ้ำ ๆ สิ่งนี้เรียกว่าการรอไม่ว่างและเกือบจะไม่ดีเสมอไป หากงานของคุณกำลังตรวจสอบผลลัพธ์ของกระบวนการย่อยคุณสามารถsubprocess.wait()
ทำมันให้เสร็จตัวอย่างเช่น หากงานของคุณคือรอไฟล์หรือไดเรกทอรีในระบบไฟล์ที่จะสัมผัสคุณสามารถใช้pyinotifyเพื่อรับรหัสของคุณที่ถูกทริกเกอร์จากเหตุการณ์ระบบไฟล์ที่จัดการโดยเคอร์เนล
ตอบ
นี่คือวิธีที่คุณเขียนลูปไม่สิ้นสุดสำหรับการรอไม่ว่างโดยไม่ต้องใช้ CPU มากเกินไป
Python 2:
from __future__ import print_function
from __future__ import division
import time
while True:
range(10000) # some payload code
print("Me again") # some console logging
time.sleep(0.2) # sane sleep time of 0.1 seconds
Python 3:
import time
while True:
range(10000) # some payload code
print("Me again") # some console logging
time.sleep(0.2) # sane sleep time of 0.1 seconds
การประเมินผล
ตามที่ @gnibbler ทดสอบแล้วในคำตอบอื่นรหัสที่แสดงไม่ควรใช้ CPU มากกว่า 1% ในเครื่องล่าสุด หากยังคงใช้ CPU มากเกินไปกับรหัส payload ของคุณให้พิจารณาเพิ่มเวลาในการนอนหลับให้ดียิ่งขึ้น ในทางกลับกันโค้ด payload อาจต้องได้รับการปรับให้เหมาะสมสำหรับการดำเนินการซ้ำ ๆ ตัวอย่างเช่นการแคชสามารถเพิ่มความเร็วในการทำงานกับข้อมูลที่ไม่เปลี่ยนแปลง
เครดิต
คำตอบนี้พยายามที่จะสร้างเมื่อ@ user2301728 ของคำตอบ