ეს გზამკვლევი ნულიდან 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-ის ცნობარშია.
შემდეგი ნაბიჯები
- იგივე ნაბიჯები JavaScript-ზე: Sandbox-ის TypeScript SDK 5 წუთში.
- AI მოდელს დააწერინეთ კოდი და აქ გაუშვით: თქვენი პირველი აგენტის ამოცანა sandbox-ში.
- ტარიფები, საცდელი კრედიტი და რა არის sandbox-ში: sandbox-ის გვერდი.
კომენტარები
ჯერ არ არის კომენტარები. იყავით პირველი.