Saya bertanya-tanya apakah ada cara mudah dan sederhana untuk mengatur boolean ke True untuk putaran waktu tertentu. Setelah itu, kembali ke False. Semua tindakan itu dilakukan saat program terus berjalan.

Mungkin saya bisa melakukan ini dengan theads dan timer?

Misalnya.

main()
decrease = Decrease()
decrease.run()

class Decrease()
  def __init__(self)
    self.value = 4
    self.isRunning = false

  def run(self)
    while True:
      self.checkIfValueIsDecreasing()
      time.sleep(2)


  def checkIfValueIsDecreasing(self)
    if self.value < 1
      self.isDecreasing = True
      time.sleep(60)
      self.isDecreasing = False

Ini hanya contoh singkat. Namun dalam hal ini, saya periksa apakah nilainya menurun setiap 2 detik. Jika ya, maka saya menetapkan nilai isDecreasing ke True selama 1 menit.

Masalahnya adalah bahwa program tidak terus berjalan. Saya ingin metode run terus berjalan setiap 2 detik ...

Seseorang memiliki petunjuk tentang itu?

1
Francis Robitaille 17 Agustus 2017, 06:05

2 jawaban

Jawaban Terbaik

Saya kira Anda bisa menggunakan utas untuk menjalankan metode Decrease.run di latar belakang.

d = Decrease()
t = threading.Thread(target=d.run)
t.daemon = True
t.start()

Tentu saja Anda dapat mengimplementasikan utas secara langsung dalam metode Decrease.run, contoh:

class Decrease:
    def __init__(self):
        self.value = 4
        self.isDecreasing = False

    def run(self): 
        def run_thread():
            while True:
                self.checkIfValueIsDecreasing()
                time.sleep(2)
        t = threading.Thread(target=run_thread)
        t.daemon = True
        t.start()
2
t.m.adam 17 Agustus 2017, 07:46

Ada fungsi pembantu dalam modul threading yang melakukan persis seperti yang Anda inginkan, yaitu Timer. Ini akan memulai penghitung waktu di utas terpisah dan ketika objek Timer habis, fungsi yang telah ditentukan sebelumnya dipanggil. Contoh berdasarkan kasus penggunaan Anda, dimodifikasi agar berfungsi dan menunjukkan perilaku, adalah:

import time
from threading import Timer

class Decrease():
    def __init__(self):
        self.value = 4
        self.isDecreasing = False

    def run(self):
        while True:
            self.checkIfValueIsDecreasing()
            time.sleep(2)
            if (self.isDecreasing):
                self.value += 1
            else:
                self.value -= 1
            print(self.value)

    def checkIfValueIsDecreasing(self):
        if self.value < 1:
            self.isDecreasing = True
            timer = Timer(60, self.timeOut)
            timer.start()

    def timeOut(self):
        self.isDecreasing = False

decrease = Decrease()
decrease.run()
1
JohanL 17 Agustus 2017, 07:18