Python Threading Thread'i durdurmak

mertkaplandar

Hectopat
Katılım
26 Aralık 2019
Mesajlar
353
Çözümler
2
Daha fazla  
Cinsiyet
Erkek
Arkadaşlar merhaba!
Yapmak istediğim başlıktaki gibi. Yani bir butona basınca Thread'ın çalışması. Diğer butona basınca Thread'ın durması.
Örnek kod:

Python:
from tkinter import *
import threading

def process():
    while True:
        print("Hello World")
processThread = threading.Thread(target=process, daemon=True)


def main():
    mainWindow = Tk()
    mainWindow.resizable(FALSE, FALSE)

    mainWindow.title("Text")
    mainWindow.geometry("500x250")

    recButton=Button(mainWindow)
    recButton.config(text="Button 1", font=("Arial", "13"), bg="red",fg="white", width="15", command="")
    recButton.place(x=15,y=10)

    stopButton=Button(mainWindow)
    stopButton.config(text="Button 2", font=("Calibri", "13"), bg="orange",fg="white", width="15", command="")
    stopButton.place(x=15,y=55)

    mainWindow.mainloop()
mainThread = threading.Thread(target=main)
mainThread.start()

Not:
Thread'ı durdurmak için bir şey yaptım oldu fakat tekrar başlatmak için .start komutunu kullanınca Thread'ın daha önce başlatıldığına dair bir hata mesajı geldi.
 
Son düzenleyen: Moderatör:
Arkadaşlar merhaba!
Yapmak istediğim başlıktaki gibi. Yani bir butona basınca Thread'ın çalışması. Diğer butona basınca Thread'ın durması.
Örnek kod:

Python:
from tkinter import *
import threading

def process():
    while True:
        print("Hello World")
processThread = threading.Thread(target=process, daemon=True)


def main():
    mainWindow = Tk()
    mainWindow.resizable(FALSE, FALSE)

    mainWindow.title("Text")
    mainWindow.geometry("500x250")

    recButton=Button(mainWindow)
    recButton.config(text="Button 1", font=("Arial", "13"), bg="red",fg="white", width="15", command="")
    recButton.place(x=15,y=10)

    stopButton=Button(mainWindow)
    stopButton.config(text="Button 2", font=("Calibri", "13"), bg="orange",fg="white", width="15", command="")
    stopButton.place(x=15,y=55)

    mainWindow.mainloop()
mainThread = threading.Thread(target=main)
mainThread.start()

Not:
Thread'ı durdurmak için bir şey yaptım oldu fakat tekrar başlatmak için .start komutunu kullanınca Thread'ın daha önce başlatıldığına dair bir hata mesajı geldi.
processThread.terminate()

 
Python:
class process:
    def __init__(self):
        self._running = True

    def terminate(self):
        self._running = False

    def run(self):
        while self._running:
            print("Hello World!")
processThread = threading.Thread(target=process.run, daemon=True)
 
Bu kod Thread'ı durdumaya yetti fakat tekrar açmak istediğimde .start methodu threading can only be started once hatası çıkarıyor.
Tekrar nasıl başlatabilirim?
 
Bu kod Thread'ı durdumaya yetti fakat tekrar açmak istediğimde .start methodu threading can only be started once hatası çıkarıyor.
Tekrar nasıl başlatabilirim?

Programala dillerindeki Thread implementasyonu cok ozel bir sebebi olmadikca bir defa baslatilabilirler. Cunku kendi icinde state tutarlar, bir seyi iki defa baslatamazsin. Birisiyle iki defa tanismak gibi. Bir context'i olur threadin, onu devam ettirebilirsin ya da ayni context ile yeni bir thread baslatabilirsin.

Python da bu gelenegi surduruyor.



Suspend, Resume, Notify vs gibi kavramlari arastirabilirsin. Formal dokumanlardan okuyarak kendin kodunu yazarsan daha saglikli olur copy paste yapmak yerine.
 

Technopat Haberler

Yeni konular

Geri
Yukarı