−25%

Windows-ის წლიურ გადახდაზე, 31 ოქტომბრამდე. ტარიფებზე

EQVPS
დაწყება

Sandbox-ის Python SDK 5 წუთში: pip install eqvps-იდან პირველ გაშვებამდე

დააყენეთ EQVPS-ის Python SDK, გაუშვით Firecracker sandbox, შეასრულეთ კოდი, დააყენეთ პაკეტი, გადაიტანეთ ფაილები და გაუშვით გრძელი სამუშაო ფონურ რეჟიმში. ექვსი ნაბიჯი ყველა ბრძანებით, და მთელი ხარჯი ერთ ცენტზე ნაკლებია.

ეს გზამკვლევი ნულიდან Python-ში მომუშავე sandbox-მდე მიგიყვანთ. გაუშვებთ იზოლირებულ Firecracker microVM-ს, შეასრულებთ მასში კოდს, დააყენებთ პაკეტს, ფაილს შეიტანთ და გამოიტანთ, და რაიმე გრძელს ფონურ რეჟიმში გაუშვებთ. თითოეული ნაბიჯი რამდენიმე ხაზია, რომელსაც უბრალოდ ჩასვამთ.

გჭირდებათ Python 3.8 ან უფრო ახალი და EQVPS-ის ანგარიში. SDK-ს დამოკიდებულებები არ აქვს.

1. აიღეთ ტოკენი

sandbox-ები ანგარიშის ბალანსიდან იხდება, ამიტომ SDK-ს ანგარიშის ტოკენი სჭირდება. ანგარიშის დაკავშირების გვერდზე მისი მიღების სამი გზაა: პანელი, API ან MCP სერვერი. შემდეგ ჩაწერეთ ის გარემოს ცვლადში:

export EQVPS_API_KEY="your-token"

ჯერ ბალანსი არ გაქვთ? პრობლემა არ არის. როცა ახალი ანგარიში პირველად ქმნის sandbox-ს საკმარისი ბალანსის გარეშე, იღებს $1 sandbox-ის კრედიტს, რომელიც 14 დღე მოქმედებს.

2. დააყენეთ SDK

pip install eqvps

3. გაუშვით sandbox და შეასრულეთ კოდი

შეინახეთ ეს როგორც hello.py და გაუშვით:

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-ის id-ს (sb_ და კიდევ 24 სიმბოლო), შემდეგ 0 3.12.x-ს. sandbox დაახლოებით ერთ წამში ჩაირთო, შეასრულა კოდი და წაიშალა, როცა with ბლოკი დასრულდა.

რა ღირს შედეგის შესახებ ცოდნა:

  • r.ok არის true, როცა გასვლის კოდი 0-ია და ბრძანებამ ტაიმაუტს არ მიაღწია;
  • არანულოვანი გასვლის კოდი გამონაკლისი არ არის, ამიტომ r.ok თავად შეამოწმეთ;
  • stdout და stderr თითოეული 1 MiB-ით შემოიფარგლება, ხოლო r.truncated გეტყვით, შეიკვეცა თუ არა გამოსავალი.

4. დააყენეთ პაკეტი და გაუშვით shell ბრძანებები

sandbox-ში თქვენ ხართ root პატარა Linux სისტემაზე, სადაც არის Python, Node.js, git და curl. exec ნებისმიერ shell ბრძანებას ასრულებს:

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

ნაგულისხმევი ტაიმაუტი 30 წამია, ხოლო სინქრონული გამოძახება მაქსიმუმ 55 წამს გრძელდება. დიდი ინსტალაციები ფონურ ამოცანაში გაუშვით (ნაბიჯი 6).

5. ფაილების შეტანა და გამოტანა

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

გზები აბსოლუტური უნდა იყოს. ერთი გადაცემა 5 MB-ით შემოიფარგლება; download აბრუნებს ბაიტებს, download_text — სტრიქონს.

6. გაუშვით გრძელი სამუშაო ფონურ რეჟიმში

გადაეცით background=True და ლოდინის ნაცვლად მაშინვე მიიღებთ ამოცანას. მას 55-წამიანი ლიმიტი არ აქვს:

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() ყოველ 2 წამში ამოწმებს და ახალ გამოსავალს მოსვლისთანავე ბეჭდავს. შეგიძლიათ თავადაც გამოიძახოთ task.logs(), ან შესაჩერებლად task.kill(). სანამ ამოცანა მუშაობს, sandbox უმოქმედობის გამო არ იშლება.

რა დაჯდა

ზემოთ თითოეული with ბლოკი რამდენიმე წამი არსებობდა და მინიმალური 60 წამით დაირიცხა. small-ზე ეს ბლოკზე $0.00055-ია, ასე რომ ხუთივე მაგალითი ერთად დაახლოებით ცენტის მესამედი ჯდება. ყველა ტარიფის ფასი, მუდმივი რეჟიმი და ხარჯის ლიმიტები sandbox-ის ლიმიტებსა და ბილინგშია.

როცა რაღაც ფუჭდება

API-ის შეცდომები გამონაკლისებია, რომელთა დაჭერაც შეგიძლიათ:

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)

როცა სერვერი ამბობს, რამდენ ხანს უნდა დაიცადოს, SDK თავად იმეორებს 429 და 503 პასუხებს სამჯერ. შეცდომების 11-ვე კლასი SDK-ის ცნობარშია.

შემდეგი ნაბიჯები

ხდკ

საცდელად საბანკო ბარათი მჭირდება?

არა. ახალი ანგარიში იღებს $1 sandbox-ის კრედიტს, როცა პირველად ქმნის sandbox-ს საკმარისი ბალანსის გარეშე. ეს მთელი გზამკვლევი მისგან ერთ ცენტზე გაცილებით ნაკლებს ხარჯავს. ამის შემდეგ ბალანსს კრიპტოთი ავსებთ.

შემიძლია sandbox-ში pip-ით პაკეტების დაყენება?

დიახ. sandbox-ებს აქვთ გამავალი ინტერნეტი, და pip აყენებს სისტემაში virtualenv-ის გარეშე. მძიმე პაკეტებს, როგორიცაა torch, მეტი დისკი და მეხსიერება სჭირდებათ, ამიტომ აირჩიეთ plus ან უფრო დიდი ტარიფი.

რატომ წყდება ჩემი ბრძანება 30 წამის შემდეგ?

run-ისა და exec-ის ნაგულისხმევი ტაიმაუტი 30 წამია, ხოლო სინქრონული გამოძახების მაქსიმუმი 55 წამი. ყველაფერი, რაც უფრო დიდხანს გრძელდება, გაუშვით background=True-ით, რომელსაც ეს ლიმიტი არ აქვს.

წაიშლება sandbox, თუ ჩემი სკრიპტი ავარიულად დასრულდება?

with ბლოკით კი: sandbox იშლება ბლოკის დასრულებისას, გამონაკლისის შემდეგაც. მის გარეშე დროებითი sandbox 5 წუთის უმოქმედობის შემდეგ იშლება, და ამ წუთებშიც იხდით.

კომენტარები

ჯერ არ არის კომენტარები. იყავით პირველი.

დატოვეთ კომენტარი

კომენტარები მოდერირდება გამოჩენამდე.