PsiCat adlı üyeden alıntı: mesajı görüntüle
Bu sorun programınızın o blokta "single-threaded" olarak çalışmasından kaynaklanıyor. Sorunu çözmek için çeşitli yöntemler bulunsa da en hızlı ve kolay yol "multi-threaded" işlem seçeneğinidir. Buna ek olarak işlemleriniz çok kısa ise "thread pool" oluştuma yöntemi genellikle daha performanslı ve az kaynak tüketebilir ancak biraz daha tecrübe ve ayarlama gerektirmektedir.

Pratikte yaptığınız işlem şudur;

import time;

def m1():
    print('1');

def m2():
    time.sleep(2);
    print(2);

def m3():
    print(3);

m1();
m2();
m3();
Çıktı;
1
2
(2 saniye donma)
3
Mantık;
|
1
|
2
|
3
|
|
m1 metoduna kadar normal işlemler gerçekleşiyor. Ancak siz programın normal akışı içerisinde kendi yazdığınız m2 methodu ile müdahale ediyorsunuz(mesaj gönderiyorsunuz) ve bu metodun çalışması(mesajın gönderilmesi) uzun sürüyor. m2 metodu işini bitirdiğinde(size mesajı göndermeyi tamamladığınızda) program normal akışına devam ediyor. Yukarıdaki örnekte program m2 metoduna geldiğinde 2 saniye kadar bekliyor. Bu süreyi ağ işleminin tamamlanması için geçen süre olarak düşününün. 2 saniye sonra m3 metodu çalışıyor ve ekrana "3" yazısı çıkıyor.

Buradan itibaren sizin yapmayı isteyeceğiniz şey m2 metodunun programın akışını etkilememesini sağlamak olmalı. Bu yüzden m2 metodunu çalıştıracak yeni bir "thread" oluşturmanız gereklidir.

import time;
import threading;

def m1():
    print('1');

def m2():
    time.sleep(2);
    print(2);

def m3():
    print(3);

m1();
t = threading.Thread(target=m2);
t.start();
m3();
Çıktı;
1
(Donma yok)
3
(Mesaj gönderme işlemi başka bir thread tarafından bitiriliyor)
2
Mantık;
|
1
| \
3  2
|
Bu şekilde m2 (mesaj gönderme) metodunun tamamlanması için gereken süre ya da m2 metodunda(alt "thread"da demek daha doğru olur) ortaya çıkacak bir hata ("runtime" hataları) ana programın(üst "thread" demek daha doğru olur) akışını etkilemez.
Çok teşekkür ederim hocam aradığım bu sanırım
Bir de bu threadlar kendiliğinden kapanır mı işlem bitince yani belki de dakikada 50 tane basit işlem yapan thread açılmış olacak da