−25%

за Windows при годишно плащане, до 31.10. Към плановете

EQVPS
Започни

Python SDK за пясъчници за 5 минути: от pip install eqvps до първото пускане

Инсталирайте Python SDK на EQVPS, пуснете пясъчник на Firecracker, изпълнете код, инсталирайте пакет, прехвърлете файлове и пуснете дълга задача във фонов режим. Шест стъпки с всички команди, а всичко струва под един цент.

Това ръководство ви води от нулата до работещ пясъчник на Python. Ще пуснете изолирана microVM на Firecracker, ще изпълните код в нея, ще инсталирате пакет, ще прехвърлите файл навътре и навън и ще пуснете нещо дълго във фонов режим. Всяка стъпка е няколко реда за поставяне.

Нужни са ви Python 3.8 или по-нов и акаунт в EQVPS. SDK няма зависимости.

1. Вземете токен

Пясъчниците се плащат от наличността на акаунта, затова SDK се нуждае от токен на акаунта. Страницата свързване на акаунта показва трите начина да го получите: таблото, API или MCP сървъра. След това го сложете в средата:

export EQVPS_API_KEY="your-token"

Още нямате наличност? Няма проблем. Когато нов акаунт за първи път създаде пясъчник без достатъчно наличност, той получава 1 $ кредит за пясъчници, валиден 14 дни.

2. Инсталирайте SDK

pip install eqvps

3. Пуснете пясъчник и изпълнете код

Запазете това като 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)

Ще видите id на пясъчника (sb_ и още 24 знака), а след това 0 3.12.x. Пясъчникът стартира за около секунда, изпълни кода и беше изтрит, когато блокът with приключи.

Полезно е да знаете за резултата:

  • r.ok е true, когато кодът на изход е 0 и командата не е стигнала таймаута си;
  • ненулев код на изход не е изключение, затова проверявайте r.ok сами;
  • stdout и stderr са ограничени до 1 MiB всеки, а r.truncated показва дали изходът е отрязан.

4. Инсталирайте пакет и пускайте shell команди

В пясъчника сте 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(), за да я спрете. Докато задача работи, пясъчникът не се изтрива заради бездействие.

Колко струваше

Всеки блок with по-горе живя няколко секунди и беше таксуван с минимума от 60 секунди. На small това е 0,00055 $ на блок, така че петте примера заедно струват около една трета от цента. Цените на всички тарифи, постоянният режим и лимитите на разходите са в лимити и таксуване на пясъчниците.

Когато нещо се обърка

Грешките на 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 $ кредит за пясъчници, когато за първи път създаде пясъчник без достатъчно наличност. Цялото това ръководство изразходва далеч под един цент от него. След това зареждате наличността с криптовалута.

Мога ли да инсталирам пакети с pip в пясъчника?

Да. Пясъчниците имат изходящ достъп до интернет и pip инсталира в системата без virtualenv. Тежки пакети като torch искат повече диск и памет, затова вземете тарифа plus или по-голяма.

Защо командата ми спира след 30 секунди?

Таймаутът по подразбиране на run и exec е 30 секунди, а максимумът за синхронно извикване е 55. Всичко по-дълго пускайте с background=True, което няма такова ограничение.

Изтрива ли се пясъчникът, ако скриптът ми се срине?

С блока with — да: пясъчникът се изтрива при излизане от блока, включително след изключение. Без него временен пясъчник се изтрива след 5 минути бездействие и тези минути се плащат.

Коментари

Още няма коментари. Бъди първият.

Остави коментар

Коментарите се модерират преди да се появят.