Rust ile Python'ı Hızlandıralım

Gbmdpof

Kıdemli Üye
23 Eyl 2016
2,001
11
[COLOR="White[SIZE="4 [URL="https://tik.lat/0MCh9"] Rust CPython[/URL] kullanacağım fakat bunun dışında Milksnake, PyO3 gibi başka paketler de kullanabilirsiniz.

Bu örnek için bir metni işleyelim ve bir metindeki tekrarlanan harfleri bulalım. Bu örnek farklı yollarla yapılabilecek olsa da genelde Python kullandığımızda yavaş kalacaktır.

Öncelikle sadece saf Python ile yapılmış ve bir tane de regex kullanılarak yapılmış örneklerin hızlarını karşılaştıralım. Bunun için pytest-benchmark'ı kullanabiliriz. Öncelikle bunu kuralım.

Kod:
sudo pip3 install pytest pytest-benchmark

Şimdi de tekrarlanan harfleri bulan bir program oluşturalım.

Kod:
import re
import string
import random

def count_doubles(val):
    total = 0
    for c1, c2 in zip(val, val[1:]):
        if c1 == c2:
            total += 1

    return total

def count_doubles_regex(val):
    return len(
        re.findall(r'(?=(.)\1)', val)
    )

val = ''.join(random.choice(string.ascii_letters) for i in range(1000000))

def test_pure_python(benchmark):
    benchmark(count_doubles, val)

def test_regex(benchmark):
    benchmark(count_doubles_regex, val)

Sonrasında ise pytest ile hızlarını karşılaştıralım.

Kod:
--------------------------------------------------------------------------------- benchmark: 2 tests --------------------------------------------------------------------------------
Name (time in ms)         Min                Max               Mean            StdDev             Median               IQR            Outliers      OPS            Rounds  Iterations
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
test_regex            25.2548 (1.0)      27.6755 (1.0)      26.0014 (1.0)      0.6194 (1.0)      25.8104 (1.0)      0.6600 (1.0)          10;3  38.4594 (1.0)          38           1
test_pure_python      48.9853 (1.94)     53.7152 (1.94)     50.3087 (1.93)     1.1094 (1.79)     50.1514 (1.94)     1.2340 (1.87)          7;1  19.8773 (0.52)         21           1
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Mean, yani ortalama sütünundaki verileri karşılaştıralım (Düşük olan daha iyi):
  • [SIZE="4
 
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.