Asyncio ile Python'da dağıtıcılar

May 08 2023
Olay tabanlı programlama nedir?
Olay tabanlı programlama, bir programın akışının, sırayla yürütülen bir dizi talimattan ziyade meydana gelen olaylar tarafından belirlendiği bir programlama paradigmasıdır. Olay tabanlı programlamada program, önceden belirlenmiş bir dizi talimatı yürütmek yerine sistemdeki veya ortamdaki olaylara yanıt verir.
Unsplash'ta Hitesh Choudhary'nin fotoğrafı

Olay tabanlı programlama, bir programın akışının, sırayla yürütülen bir dizi talimattan ziyade meydana gelen olaylar tarafından belirlendiği bir programlama paradigmasıdır. Olay tabanlı programlamada program, önceden belirlenmiş bir dizi talimatı yürütmek yerine sistemdeki veya ortamdaki olaylara yanıt verir.

Kullanıcı girişi, sistem olayları, ağ etkinliği veya zamanlayıcılar gibi çeşitli kaynaklar olayları tetikleyebilir. Bir olay meydana geldiğinde, program, söz konusu olayı işlemek için kayıtlı bir veya daha fazla işlevi veya geri aramayı yürüterek buna tepki verebilir. Bu, belirli bir dizi eylemin tamamlanmasını beklemek yerine olaylara meydana geldikleri anda tepki verebildiği için programın daha esnek ve duyarlı olmasını sağlar.

Olay tabanlı programlama, fare tıklamaları veya klavye girişi gibi kullanıcı eylemlerinin programdaki eylemleri veya güncellemeleri tetikleyen olaylar olarak ele alındığı grafik kullanıcı arabirimlerinde (GUI'ler) yaygın olarak kullanılır. Ayrıca, HTTP isteklerinin veya tarayıcı olaylarının sunucu tarafında veya istemci tarafında kod yürütülmesini tetiklediği web geliştirmede de kullanılır. Olay güdümlü mimariler, mesajların veya olayların farklı hizmetler veya bileşenler arasında iletişim kurduğu dağıtılmış sistemlerde de daha yaygın hale geliyor.

Sevk görevlisi

Olay tabanlı programlama bağlamında, dağıtıcı, olayları alan ve ardından bunları uygun olay işleyicilerine gönderen bir nesnedir. Gönderici, olay işleyicilerin kaydını ve kaydını iptal etmeyi yönetmekten ve olayların doğru işleyicilere teslim edilmesini sağlamaktan sorumludur.

Bazı olay güdümlü çerçevelerde, dağıtıcıya olay veriyolu veya döngüsü adı verilir. Olay veri yolu, çeşitli kaynaklardan olayları alır ve uygun olay işleyicilerine gönderir. Olay döngüsü, olaylara yanıt olarak eşyordamların ve geri aramaların zamanlamasını ve yürütülmesini yönetir.

Dağıtıcı, olay işleyicilerine gönderilmeden önce olayları filtreleme ve işleme gibi diğer görevleri de gerçekleştirebilir. Örneğin, bir dağıtıcı, olayların filtrelendiği ve yalnızca onları almak için abone olan olay işleyicilere gönderildiği bir yayınla-abone ol modeli uygulayabilir.

Asyncio ile Python'da Gönderici Oluşturun

asyncio.QueuePython'da asyncio kullanarak bir dağıtım programı oluşturmak için, eşyordamlar arasında iletileri iletmek için kullanılabilecek bir kuyruk oluşturmak için sınıfı kullanabilirsiniz . İşte basit bir dağıtım programı uygulaması örneği. Bir dosya oluşturun dispatcher.pyve aşağıdaki kodu ekleyin:

import asyncio

async def producer(queue):
    for i in range(10):
        await asyncio.sleep(1)
        await queue.put(i)
    await queue.put(None)

async def consumer(queue):
    while True:
        item = await queue.get()
        if item is None:
            break
        print(f"Consumed: {item}")
        queue.task_done()

async def main():
    queue = asyncio.Queue()
    tasks = [
        asyncio.create_task(producer(queue)),
        asyncio.create_task(consumer(queue)),
    ]
    await asyncio.gather(*tasks)
    await queue.join()

asyncio.run(main())

Eşyordamda main, bir örneğini yaratırız asyncio.Queueve onu hem eşyordamlara producerhem de consumereşyordamlara iletiriz. Daha sonra kullanarak her iki eşyordam için görevler oluştururuz asyncio.create_task()ve asyncio.gather()eşzamanlı olarak çalıştırmak için bunları öğesine iletiriz. queue.join()Son olarak, tüm görevlerin tamamlanmasını beklemek için çağırıyoruz .

ile dosyayı çalıştırın python3 dispatcher.py. Aşağıdaki çıktıyı alacaksınız:

Bu makalenin kodu Github'da mevcuttur:

Çözüm

Gönderici genellikle olay tabanlı bir sistemdeki olayların yönetilmesinde kritik bir rol oynar. Olayların verimli ve doğru bir şekilde işlenmesini ve olay işleyicilerin gerektiği gibi doğru bir şekilde kaydedilmesini ve kaydedilmemesini sağlar.

Bu makale için bu kadar! Yorumlarda geri bildirim veya soru bırakmaktan çekinmeyin. Bunu heyecan verici bir okuma bulduysanız, birkaç alkış bırakın ve takip edin! Şerefe!