Fonksiyonu bekletmek istiyorum ?


#1

Merhaba arkadaşlar,

import time
import threading



def fonksiyon1(pp):
    print("fonksiyon "+pp+" calisti")
    for i in range(1,100):
        time.sleep(0.5)
        print(i)
    

def anafonksiyon(cc):
    
    th1 = threading.Thread(target = fonksiyon1,args=("1"))
    th1.start()
    time.sleep(1)
    th2 = threading.Thread(target = fonksiyon1,args=("2"))
    th2.start()
    
    


d1 = anafonksiyon(20)
d2 = anafonksiyon(30)


Çıktı:


fonksiyon 1 calisti
1
fonksiyon 2 calisti
fonksiyon 1 calisti
2
1
1
3
22fonksiyon 2 calisti


4
313

v.s. v.s. böyle devam ediyor. Benim yapmak istediğim olay ise d1 değişkenindeki ana fonksiyon bittikden sonra d2 değişkeni çalışmaya başlayacak :slight_smile: Kodları örnek olsun diye hazırladım. Nası yapabilirim yardımcı olursanız çok menmun olurum.


#2

Şu şekilde çıktı almak istiyorum yani. Threadlara elleyemiyorum onlar durmak zorunda :slight_smile:

fonksiyon 1 calisti
1
2
3
...
99
fonksiyon 2 calisti
1
2
3
4
5
6


#3
import sys,time
import threading



def fonksiyon1(pp):
    print("fonksiyon "+pp+" calisti")
    for i in range(1,100):
        time.sleep(0.5)
        print(i)

def anafonksiyon(cc):

    th1 = threading.Thread(target = fonksiyon1,args=("1"))
    th1.start()
    time.sleep(51) # 1-100 arası zamanda 0.5 saniye hız olduğu için zaman aralığını (100/2)+1 şeklinde seçtim.
    th2 = threading.Thread(target = fonksiyon1,args=("2"))
    th2.start()
    time.sleep(51) # Buraya da ekledim.

d1 = anafonksiyon(20)
d2 = anafonksiyon(30)

Yalnızca time.sleep(51) ile işi kurtardım gibi görünüyor. Ancak saniye bazlı bir kurtarmada dikkat edeceğiniz şey hız olabilir belki. Elimden şimdilik bu kadar geldi. Umarım farklı bir çözüm aramıyorsunuz. :slight_smile:


#4

Hocam ilginiz için çok teşekkür ederim. Malesef ben thread lara müdahale edemiyorum. Yani paket paket işlem yapıyorum. Thread arasına sleep koyduğumda boşuna beklemiş olacağım :slight_smile: d1 fonksiyonu bittiginde d2 fonksiyonuna başlatmam lazım.


#5

Rica ederim. Ben de çok hakim değilim bu tür konulara ama en azından kendimi geliştirmek için yazıp yazıp duruyorum başlıklara. :slight_smile: Hem belki yardımcı olurum diye… Tam da düşündüğüm şeyi söylediniz. Benim çözümüm biraz daha yan sanayi ürünü gibi geldi. Hatta çin malı. Nedeni şu: kodlar birbirini bitişine göre takip etmiyor. Belirlediğimiz bekleme süresine göre takip ediyor. Bu hem hız açısından hem işlevsellik açısından orjinalliği yansıtmıyor. Benim fikrim bu. Belki de sys.stdout çıktısını kontrol etmek lazım. O da çözüm dışında mı acaba?


#6

Hocam sys modulü öylesine koymuşum sys kullanmıyor modüller :slight_smile: Benim hatam aslında çalışma sayfamda öylesine duruyormuş. Burayada eklemişim. Karışıklık için özür dilerim.


#7

Thread’lerin mantığı aynı anda çalışmalarıdır. Birbirlerini takip edeceklerse thread kullanmanıza gerek yok.


#8

sn @ismailarilik bey’in de dediği gibi, Thread’ler aynı anda çalışmak üzere tasarlanmıştır. Ancak konu dışı mı bilmiyorum ama bir konudan bahsetmek istiyorum.

Bazı dillerde Thread önceliği ayarlamak mümkün. Örneğin Java’da bir Thread’i düşük ve yüksek öncelikli olarak çalıştırabilirsiniz. Python’da bu mümkün değil. Çünkü Python’da buna açık bir şekilde izin verilmiyor. Thread önceliği konusu “Thread priority” olarak geçiyor.


#9

Bugün bir makale okuduğumda aklıma sizin konunuz geldi. Belki işe yarar :slight_smile:


#10

Fonksiyonların sıralı çalışmasını istiyorsanız sched modülüne bakın. Acayip kullanışlı bir o kadar da kullanılmayan bir modül.