Ya, itu mungkin dilakukan dalam satu utas. Namun secara umum, Anda harus memperbarui objek setiap frame dan tidak hanya ketika ada siklus cadangan. Animasi dan gerakan Anda akan terputus dari frame rate dan terlihat agak berombak jika tidak. Jika Anda berbicara lebih banyak tentang pembaruan AI atau hal lain yang tidak perlu real-time, saya akan meletakkan timer di atasnya. Anda harus tahu berapa frame rate target Anda dan waktu idle akan menjadi apa pun yang tersisa setelah semuanya selesai.
Katakanlah Anda menargetkan 60 FPS untuk game Anda. Itu membuat Anda dengan 16,667 ms untuk melakukan semua pekerjaan yang Anda butuhkan untuk melakukan setiap frame. Di awal permainan, dapatkan waktu saat ini menggunakan timer resolusi tertinggi yang tersedia, tambahkan 16,667 ms ke sana dan simpan di suatu tempat. Saya pikir fungsi dalam python adalah waktu () meskipun sudah lama sejak saya bekerja dalam bahasa. Setelah pemrosesan Anda selesai, masukkan loop yang memeriksa waktu saat ini terhadap waktu yang telah Anda rekam. Jika waktu saat ini kurang dari waktu akhir bingkai, perbarui_a_very_small_amount. Saya tidak akan terlalu khawatir tentang pemrosesan yang melewati akhir frame karena pembaruan kecil Anda harus cepat diproses. Ini hanya akan menjadi sedikit keterlambatan pada awal frame berikutnya dan Anda tampaknya memiliki waktu idle yang cukup untuk menanganinya.
Setelah frame selesai diproses, tambahkan 16,667 ms ke waktu yang disimpan untuk akhir frame terakhir untuk mengetahui di mana ujung frame berikutnya seharusnya. Jika Anda menggunakan waktu saat ini + 16,667 ms dan pemrosesan berjalan, akhir frame berikutnya akan didorong keluar oleh seberapa banyak waktu frame terakhir berlari.
Re: Edit Kedua
Untuk memperjelas, saya menggunakan istilah frame-rate di sini untuk menunjukkan satu iterasi melalui loop utama. Jika didasarkan pada kecepatan input pengguna, saya membayangkan bahwa tujuan Anda adalah membuat game terasa responsif. Kalau tidak, Anda bisa memeriksa input dan memperbarui semuanya setiap kali melalui loop bahkan jika diperlukan 10 detik untuk melakukannya. Untuk membuatnya merasa responsif, Anda mungkin ingin memeriksa input sekitar 20 kali per detik yang memberikan frame rate efektif 20 FPS, bahkan jika Anda tidak benar-benar menggambar frame ini. Ini akan memberi Anda 50 ms untuk memperbarui hal-hal sebelum Anda perlu memeriksa input lagi.