−25%

yıllık Windows ödemesinde, 31 Ekim'e kadar. Paketlere git

EQVPS
Hemen başla

5 dakikada sandbox için Python SDK: pip install eqvps'den ilk çalıştırmaya

EQVPS Python SDK'yı kurun, bir Firecracker sandbox başlatın, kod çalıştırın, paket kurun, dosya taşıyın ve uzun bir işi arka planda çalıştırın. Tüm komutlarıyla altı adım; hepsinin maliyeti bir sentten az.

Bu rehber sizi sıfırdan Python'da çalışan bir sandbox'a götürür. Yalıtılmış bir Firecracker microVM başlatacak, içinde kod çalıştıracak, bir paket kuracak, bir dosyayı içeri alıp dışarı çıkaracak ve uzun bir işi arka planda çalıştıracaksınız. Her adım yapıştırılacak birkaç satırdır.

Python 3.8 veya üstü ve bir EQVPS hesabı gerekir. SDK'nın bağımlılığı yoktur.

1. Token alın

Sandbox'lar hesap bakiyesinden ödenir, bu yüzden SDK'nın bir hesap token'ına ihtiyacı vardır. Hesabınızı bağlama sayfası token almanın üç yolunu gösterir: panel, API veya MCP sunucusu. Ardından onu ortama koyun:

export EQVPS_API_KEY="your-token"

Henüz bakiye yok mu? Sorun değil. Yeni bir hesap, yeterli bakiyesi olmadan ilk kez sandbox oluşturduğunda 14 gün geçerli 1 $ sandbox kredisi alır.

2. SDK'yı kurun

pip install eqvps

3. Sandbox başlatın ve kod çalıştırın

Bunu hello.py olarak kaydedip çalıştırın:

from eqvps import Sandbox

with Sandbox.create(tariff="small") as sb:
    print(sb.id)
    r = sb.run("import platform; print(platform.python_version())")
    print(r.exit_code, r.stdout)

Sandbox kimliğini (sb_ ve ardından 24 karakter), sonra da 0 3.12.x göreceksiniz. Sandbox yaklaşık bir saniyede başladı, kodu çalıştırdı ve with bloğu bittiğinde silindi.

Sonuç hakkında bilmeye değer birkaç şey:

  • çıkış kodu 0 olduğunda ve komut zaman aşımına uğramadığında r.ok true olur;
  • sıfırdan farklı bir çıkış kodu istisna değildir, bu yüzden r.ok değerini kendiniz kontrol edin;
  • stdout ve stderr her biri 1 MiB ile sınırlıdır; çıktı kesildiyse r.truncated bunu söyler.

4. Paket kurun ve kabuk komutları çalıştırın

Sandbox içinde Python, Node.js, git ve curl bulunan küçük bir Linux sisteminde root'sunuz. exec herhangi bir kabuk komutunu çalıştırır:

from eqvps import Sandbox

with Sandbox.create(tariff="small") as sb:
    sb.exec("pip install --quiet requests", timeout=55)
    r = sb.run("import requests; print(requests.get('https://example.com').status_code)")
    print(r.stdout)   # 200

Varsayılan zaman aşımı 30 saniyedir ve eşzamanlı bir çağrı en fazla 55 saniye sürebilir. Büyük kurulumlar bir arka plan görevine aittir (6. adım).

5. Dosyaları içeri alın ve dışarı çıkarın

from eqvps import Sandbox

with Sandbox.create() as sb:
    sb.upload("/root/data.csv", "a,b\n1,2\n3,4\n")
    sb.run("""
import csv
rows = list(csv.DictReader(open('/root/data.csv')))
open('/root/sum.txt', 'w').write(str(sum(int(r['b']) for r in rows)))
""")
    print(sb.download_text("/root/sum.txt"))   # 6

Yollar mutlak olmalıdır. Tek bir aktarım 5 MB ile sınırlıdır; download bayt, download_text metin döndürür.

6. Uzun bir işi arka planda çalıştırın

background=True verin; beklemek yerine bir görev alırsınız. Görevin 55 saniyelik sınırı yoktur:

from eqvps import Sandbox

with Sandbox.create(tariff="standard") as sb:
    task = sb.exec("for i in 1 2 3 4 5; do echo step $i; sleep 20; done", background=True)
    result = task.wait(on_output=lambda out, err: print(out, end=""))
    print(result.state, result.exit_code)   # done 0

task.wait() her 2 saniyede bir sorgular ve yeni çıktıyı geldikçe yazdırır. task.logs() çağrısını kendiniz yapabilir ya da durdurmak için task.kill() kullanabilirsiniz. Bir görev çalıştığı sürece sandbox hareketsizlik nedeniyle silinmez.

Bunun maliyeti

Yukarıdaki her with bloğu birkaç saniye yaşadı ve 60 saniyelik asgari süre üzerinden faturalandı. small tarifesinde bu blok başına 0,00055 $ eder; yani beş örneğin toplamı yaklaşık üçte bir sent tutar. Tüm tarifelerin fiyatları, kalıcı mod ve harcama limitleri sandbox sınırları ve faturalama sayfasındadır.

Bir şeyler ters gittiğinde

API hataları yakalayabileceğiniz istisnalardır:

from eqvps import Sandbox, InsufficientBalanceError, RateLimitError

try:
    with Sandbox.create() as sb:
        print(sb.run("print(1)").stdout)
except InsufficientBalanceError:
    print("Top up the balance")
except RateLimitError as e:
    print("Too many at once, retry in", e.retry_after)

Sunucu ne kadar bekleneceğini söylediğinde SDK, 429 ve 503 yanıtlarını zaten üç kereye kadar yeniden dener. 11 hata sınıfının tamamı SDK başvurusunda listelenmiştir.

Sonraki adımlar

SSS

Denemek için kredi kartı gerekiyor mu?

Hayır. Yeni bir hesap, yeterli bakiyesi olmadan ilk kez sandbox oluşturduğunda 1 $ sandbox kredisi alır. Bu rehberin tamamı bu kredinin bir sentten çok daha azını harcar. Sonrasında bakiyeyi kripto ile yüklersiniz.

Sandbox içinde pip ile paket kurabilir miyim?

Evet. Sandbox'ların internete çıkışı vardır ve pip, virtualenv olmadan sisteme kurar. torch gibi ağır paketler daha fazla disk ve bellek ister, bunlar için plus ya da daha büyük tarifeyi seçin.

Komutum neden 30 saniye sonra kesiliyor?

run ve exec için varsayılan zaman aşımı 30 saniyedir, eşzamanlı bir çağrının üst sınırı ise 55. Daha uzun süren her şeyi bu sınırı olmayan background=True ile çalıştırın.

Betiğim çökerse sandbox silinir mi?

with bloğuyla evet: sandbox, blok bittiğinde silinir, bir istisnadan sonra bile. Blok olmadan geçici bir sandbox 5 dakika işlem yapılmadığında silinir ve bu dakikaların ücretini ödersiniz.

Yorumlar

Henüz yorum yok. İlk olun.

Bir yorum bırakın

Yorumlar görünmeden önce denetlenir.