Asyncio(Asenkron Programlama) #Ar-Ge Kulübü

s4bb4H

Üye
31 Ara 2018
119
0
loneliness
Merhaba bugün size Asyncio yani Asenkron Programlama hakkında bilgi vereceğim.

-Asyncio: async/await sözdizimini kullanarak eşzamanlı kod yazmak için kullanılır.


-Yüksek performanslı ağ ve web sunucuları, dağıtılmış görev sıraları vb. sağlayan çoklu Python asenkron çerçeveleri için temel olarak kullanılır.

Asyncio ile "Hello World!" yazmak:

Kod:
import asyncio
async def main():
   print('Hello...')
   await asyncio.sleep(1)
   print('...World!')
asyncio.run(main())

- i/o tabanlı (disk,ağ, vs) işlemleri yaparken tek bir thread'in o işlemin sonucunu beklemekle uğraşmadan başka işler yapmasını sağlayan programlama modelidir.

-Asyncio , High-level ve Low-level olmak üzere 2 çeşit API hizmeti sağlar.

Öncelikle "API" nedir?
API (Application Programming Interface)

-API (Uygulama Programlama Arayüzü) bir uygulamanın veya platformun sahip olduğu yeteneklerin dışarıdan izin verilen sınırlandırılmalar dahilinde kullanılabilmesini sağlayan arayüzdür.

-High-Level (Yüksek Seviye) API Görevleri:

-Zaman uyumsuz programları çalıştırmak , zaman aşımına uğramış
birşeyi beklemeye yardımcı olan programlar.


run()- Olay döngüsü oluştur
create_task()- Bir asenkron döngüsü oluştur.
await sleep()- Bir kaç saniye uyu.
await gather()- Programlama ve eşzamanlı olarak bekle.
await wait_for()- Zaman aşımı ile çalıştır.
await shield()- İptal etmekten kaçın.
await wait()- Tamamlanmasını izle.
current_task()- Geçerli göreve dönüş
all_tasks()- Bir olay döngüsü için tüm görevleri döndür

-Low-Level (Düşük Seviye) API Görevleri:

Olay Döngüsünü Alma:
asyncio.get_running_loop()- Çalışan olay döngüsünü elde etmek için tercih edilen işlev
asyncio.get_event_loop()- Bir olay döngüsü örneği edin.
asyncio.set_event_loop()- Olay döngüsünü geçerli politika aracılığıyla güncel olarak ayarla.
asyncio.new_event_loop()- Yeni bir etkinlik döngüsü oluştur.

Olay Döngü Metodları:
loop.run_until_complete()- Görevi tamamlanana kadar bekle.
loop.run_forever()- Olay döngüsünü sonsuza dek çalıştır.
loop.stop()- Olay döngüsünü durdur.
loop.close()- Olay döngüsünü kapat.
loop.is_running()- Olay döngüsü çalışıyorsa TRUE döndür.
loop.is_closed()- Olay döngüsü kapalıysa TRUE döndür.
await loop.shutdown_asyncgens()- Asenkron Döngüleri kapatın.

Eşzamanlılık ve Çoklu Okuma

Bir olay döngüsü, bir iş parçacığında(genellikle ana iş parçacığında) çalışır ve iş parçaçığındaki tüm geri aramaları ve görevleri yürütür. Bir görev olay döngüsünde çalışırken aynı iş parçasında başka görevler asla çalıştırılamaz. Görev bekleyen bir ifadeyi yürüttüğünüzde , çalışan görev askıya alınır ardından olay döngüsü bir sonraki görevi yürütür.

Farklı bir işletim sistemi iş parçacığından bir geri çağırma zamanlaması için loop.call_soon_threadsafe() yöntemi kullanılır. Örneğin:
Kod:
loop.call_soon_threadsafe(callback, *args)
Bu tür bir kodun düşük seviyeli bir asyncio API'sini çağırması için bir ihtiyaç varsa loop.call_soon_threadsafe() komutu kullanılmalıdır..
Kod:
loop.call_soon_threadsafe(fut.cancel)

Farklı bir işletim sistemi iş parçacığından bir coroutine nesnesi zamanlamak için run_coroutine_threadsafe() işlevi kullanılmalıdır. Bir concurrent.futures döndürür.
Kod:
async def coro_func():
     return await asyncio.sleep(1, 42)

# Başka bir os iş parçacığında:

future = asyncio.run_coroutine_threadsafe(coro_func(), loop)
# Sonucu beklemek:
result = future.result()
Sinyalleri işlemek ve alt işlemleri yürütmek için, olay döngüsünün ana iş parçacığında çalıştırılması gerekiyor.


Loop.run_in_executor () yöntemi, olay döngüsünün çalıştığı işletim sistemi iş parçacığını engellemeden farklı bir işletim sistemi iş parçacığında engelleme kodunu yürütmek için bir concurrent.futures.ThreadPoolExecutor ile birlikte kullanılabilir.


Logging Metodu:
Asyncio, kayıt modülünü kullanır ve tüm kayıt "asyncio" kayıt cihazı aracılığıyla gerçekleştirilmektedir.
Kod:
logging.getLogger("asyncio").setLevel(logging.WARNING)
Bu kodcuk ile kısaca açıklayabiliriz.

Arkadaşlar elimden geldiği kadarıyla size anlatmak istedim fazla eksik olabilir lakin benimde pek fazla üstünde uzman olduğum bir konu değil. İyi forumlar.
 
Son düzenleme:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.