CWSANDBOX_API_KEY에 설정된 CoreWeave API 액세스 토큰을 사용합니다. Forge API 키 인증은 시작하기를 참조하세요. CKS 요구 사항은 배치 모드를 참조하세요.
이 가이드에서는 CoreWeave 샌드박스 Python SDK(cwsandbox)에서 동기화 및 비동기 패턴 중에서 선택하는 방법을 도와주며, 각 일반적인 오퍼레이션의 동기화 및 비동기 형식을 보여줍니다.
SDK는 내부적으로 단일 비동기 구현을 가지고 있습니다. 동기화/비동기 유연성은 결과를 소비하는 방법에서 비롯됩니다: 동기화에는 .result()를 사용하고 비동기에는 await를 사용하세요.
빠른 결정 가이드
기본 원칙: 단순하게 작성하려면 sync 패턴(
.result())을 사용하세요. 이미
async 코드베이스에서 작업 중인 경우에만 await으로 전환하세요.
핵심 개념: OperationRef
대부분의 SDK 메서드는.result() 호출과 await가 모두 가능한 래퍼인 OperationRef[T]를 반환합니다.
두 방식 모두 동일한 예외를 발생시킵니다.
Sandbox.exec()는 OperationRef[ProcessResult]를 확장한 Process를 스트림과
stdin을 지원하도록 반환합니다.
자동 시작 동작
session.sandbox()는 시작되지 않은 샌드박스를 반환합니다. 샌드박스는 이를 필요로 하는 첫 번째 오퍼레이션에서 자동으로 시작됩니다:
자동 시작을 트리거합니다: exec(), read_file(), write_file(), wait(), wait_until_complete()
자동 시작하지 않습니다: get_status() (SandboxNotRunningError 예외 발생), stop() (시작된 적이 없으면 no-op)
오퍼레이션
샌드박스 생성
- Sync
- Async
Sandbox.run()은 내부적으로 start().result()를 호출하며, 이는 이벤트 루프를 차단합니다.
비동기 코드에서는 Sandbox(...)로 생성한 후 async with 또는 await sandbox를 사용하여
RUNNING 상태에 도달하세요.start()
- Sync
- Async
exec()
- Sync
- Async
read_file()
- Sync
- Async
write_file()
- Sync
- Async
stop()
- Sync
- Async
wait()
wait()는 샌드박스가 RUNNING 상태에 도달할 때까지 실행을 차단합니다. 실행 차단이 목적이므로
동기 방식으로만 사용할 수 있습니다. 비동기 코드에서는 await sandbox가 같은 역할을 합니다.
wait_until_complete()
- Sync
- Async
get_status()
get_status()는 동기 방식으로만 사용할 수 있습니다. API에서 현재 상태를 조회합니다.
Sandbox.list()
- Sync
- Async
Sandbox.from_id()
- Sync
- Async
Sandbox.delete()
- Sync
- Async
session.list()
- 동기
- 비동기
session.from_id()
- Sync
- Async
스트림 stdout
- Sync
- Async
stdin 스트림
stdin=True로 stdin을 활성화합니다. 원시 바이트를 쓸 때는 write()를, 텍스트 줄을 쓸 때는 writeline()을 사용하고,
EOF를 알리려면 close()를 호출하세요.
- Sync
- Async
cwsandbox.results()
cwsandbox.results()는 동기 방식으로만 사용할 수 있는 배치 헬퍼입니다. 하나 이상의 OperationRef 객체에 .result()를 호출합니다.
cwsandbox.wait()
cwsandbox.wait()는 동기 방식으로만 사용할 수 있습니다. Sandbox, OperationRef 또는 Process
객체 시퀀스를 기다리고 (done, pending)을 반환합니다. 샌드박스는 완료 시점이 아니라
RUNNING 상태에 도달할 때 대기가 해제됩니다.
@session.function()
- Sync
- Async
병렬 실행
sync API는 오퍼레이션이 설계상 non-blocking이기 때문에 병렬 실행을 지원합니다.exec(), read_file(), write_file() 같은 메서드는 즉시 반환됩니다. .result()를 호출할 때만
블록됩니다.
Sandbox.run()은 backend가 start request를 수락할 때까지 블록합니다(내부적으로 start().result()를
호출합니다). 병렬 시작을 위해 session.sandbox()(첫 오퍼레이션 시 자동 시작)를 사용하거나
start() Ref를 수집하세요:
Jupyter 노트북
SDK가 데몬 스레드에서 자체 백그라운드 이벤트 루프를 실행하므로 sync API는nest_asyncio 없이도 Jupyter에서 작동합니다.
await를 바로 쓸 수 있습니다.
오류 처리
동기화 경로와 비동기 경로는 모두 동일한 예외를 발생시킵니다..result()는 기본 오퍼레이션에서 발생한 모든 예외를
다시 발생시키며, await도 마찬가지입니다. 전체 예외 계층 구조와 복구 패턴은 일반적인 샌드박스 SDK 오류 메시지는 무엇을 의미하나요?를
참조하세요.