ctypes
- Python kursu
- Uzman
- Ders 46/47
- 6 dk
ctypes ile yerel kod çağrısı yazarsın.
Yerel kod katmanı
Bu derste ctypes ile C kütüphanesinden abs fonksiyonunu çağırma ekleyeceksin. ctypes.CDLL(None) varsayılan C kütüphanesini yükler.
libc.abs(-7) çağrısı negatif sayının mutlak değerini verir. Önceki derslerin kodu başlangıçta hazır. Sen yalnızca import ctypes, CDLL(None) ve abs çağrısını eklersin. Bu katman, son derste paralel işleme ile birleştirilecek.
Uygulama ctypes ile abs çağır
Başlangıç kodunda Tool, Field, ModelMeta ve square hazır. Şimdi import ctypes ile modülü içe aktar. libc = ctypes.CDLL(None) ile kütüphaneyi yükle. print(libc.abs(-7)) ile mutlak değeri yazdır.
Başlangıç kodu
# Tool sınıfını type() ile oluştur
Tool = type("Tool", (), {
"name": "arac",
"run": lambda self: f"{self.name} calisti",
})
# Field descriptor ve ModelMeta ekle
class Field:
def __set_name__(self, owner, name):
self.name = name
if not hasattr(owner, "fields"):
owner.fields = []
owner.fields.append(name)
class ModelMeta(type):
def __new__(mcs, name, bases, ns):
return super().__new__(mcs, name, bases, ns)
class Model(metaclass=ModelMeta):
ad = Field()
# Paralel kare hesaplama ekle
from multiprocessing import Pool
def square(x):
return x * x
# Yerel abs çağrısı ekle
# libc yükle ve abs çağır
# sonucu yazdırÖrnek çözüm
# Tool sınıfını type() ile oluştur
Tool = type("Tool", (), {
"name": "arac",
"run": lambda self: f"{self.name} calisti",
})
# Field descriptor ve ModelMeta ekle
class Field:
def __set_name__(self, owner, name):
self.name = name
if not hasattr(owner, "fields"):
owner.fields = []
owner.fields.append(name)
class ModelMeta(type):
def __new__(mcs, name, bases, ns):
return super().__new__(mcs, name, bases, ns)
class Model(metaclass=ModelMeta):
ad = Field()
# Paralel kare hesaplama ekle
from multiprocessing import Pool
def square(x):
return x * x
# Yerel abs çağrısı ekle
import ctypes
libc = ctypes.CDLL(None)
print(libc.abs(-7))Beklenen çıktı
7
Sıradaki adım: birleştirme
ctypes katmanı hazır. Son derste tüm katmanları birleştireceksin: abs_val fonksiyonu hem libc.abs çağırır hem de Pool.map ile paralel çalışır.
Bu, metaprogramming, multiprocessing ve ctypes'ı tek bir uygulamada birleştirir. Şimdiye kadar dört katman hazır: Tool, Field/ModelMeta, Pool ve ctypes. Tüm bu teknikler birlikte çalışacak.
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 CDLL ne yükler?
import ctypes
libc = ctypes.CDLL(None)- Bir Python modülü
- Bir web sayfası
- Paylaşımlı C kütüphanesi Doğru cevap
- Bir dizi
Açıklama: CDLL paylaşılan bir C kütüphanesi yükler.
2 ctypes kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
ctypes |
C arayüzü |
CDLL |
Kütüphane yükler |
libc |
Kütüphane nesnesi |
.abs |
Fonksiyon çağrısı |
3 CDLL çağrısını tamamla
import ctypes
libc = ctypes.____(None)
import ctypes
libc = ctypes.CDLL(None)
Açıklama: ctypes.CDLL(None) varsayılan C kütüphanesini yükler.