Python - Program Kaldığı Yerden Devam Edebilir Mi?

Merhaba değerli forum üyeleri,

Python programımın kaldığı yerden devam etmesi için neler yapmamız nasıl bir yol izlememiz ya da programın kodlama ve çalışma mantığını nasıl oluşturmamız gerekiyor?

2 Beğeni

Merhaba.
Israrla sorunuz ile alakası olmayan etiketler eklememek ile başlayabilirsiniz bence. Bu etiketler sorunun alakalı olduğu konular ile ilgili bilgi vermek amaçlıdır. Etiket ekleme gibi bir zorunluluğunuz yok zaten.

Ben bu dediğiniz için genel bir çözüm olduğunu sanmıyorum. Zaten sizin de büyük ihtimalle devam edilmesini istediğiniz belli bir kaç yer vardır, bunları fonksiyon haline getirip en son girilen fonksiyonun ismini bir dosyaya yazabilirsiniz. Ama niçin böyle bir şeye ihtiyaç duyduğunu anlamadım, tam olarak ne yapmak istiyorsunuz?

1 Beğeni

Metin tabanlı bir oyun kodluyorum. oyunun gidişatını veri tabanında kayıt da ediyorum. Fakat doğal olarak kapatıp açtığımda baştan başlıyor.

şöyle bir mantık oluşturmuştum. veri tabanına kayıt ederken her kayıtta artan bir değer ve bu değer oyunun “save” bölümlerinde bir değişkene eşit. veri tabanının son satırında örneğin son yapılan save alanının bir değişkeni var. Bu değişkeni program açıldığında çekerek orayı bulmasını ve o değişkenden sonrasında gelen kodların çalışmasını hayal etmiştim. Sadece, verileri çekebildim. Değişkene gidip kaldığı yerden devam ettiremedim.

1 Beğeni

Böyle bir şey yapabileceğinizi sanmıyorum. Ama gerek de yok bence. Oyunuz metin tabanlı dediniz, yani oyunun çoğu kullanıcının metin girişi yapması ile geçiyor ve bu metinler üzerinden işlemler yapılıyor. En son hangi işlemde kaldığınızı kaydedip bu işleme devam edebilirsiniz.

Program açıldığında değişkenin değerini sorgulatıp ona göre bir senaryo ile başlaması için fonksiyon kontrolüyle çalıştırılabilir.

Programin niye durdugu belirtilmemis.

Calismasi onlenmek isteniyorsa ve koda erisim varsa durdurulmak time.sleep cagirabilir. Belirtilen sure gectikten sonra program kaldigi yerden devam edecektir. (sleep tek thread’i uyutuyor ama Python programlari tek threadli—degil ama aksini iddia edebilecek insanin bu cevabi okumasina gerek yok.)

Linux’taysak program SIGSTOP sinyaliyle durdurulup SIGCONT sinyaliyle kaldigi yerden baslatilabilir.

Sistem kapanmasinda hayatta kalmak istiyorsak isletim sisteminin hibernation ozelligini kullanabiliriz.

Programin kapatilmasinda hayatta kalmak istiyorsan kullanilan onemli degiskenleri tek bir dict'te toplayip kapanirken kaydetmen, acilirken de geri okuman lazim.

Burada ne kastettiğinizi açabilir misiniz?

Python efektif olarak tek thread’li. Kolayca paralellestirilebilecek bir kod bile yazilsa, tek thread olarak calistiriyor (CPython; baska implementasyonunu kullanmadim/bilemiyorum). Kutuphane cagrilari bile synchronous/blocking.

Ama tabi threading kutuphanesi var; explicit olarak ikinci bir thread yaratabiliyoruz. Yani aslinda degil. Ama threading'i kullanabilen bir insan icin yazmadim cevabimi. Program state’ini iki thread arasinda paylasmak, olurken kaydedip dogarken okumaktan cok daha zor sonucta.

Butun bunlarla beraber, CPython’in kac isletim sistemi thread’i kullandigini bilmiyorum. Acildiginda da, GC icin de, Thread yaratildiginda da.

1 Beğeni

cevaplar için teşekkürler üzerinde çalışıp araştırmaya devam edeceğim

1 Beğeni