# SDK & API

The eugo.hpc Python API: decorators, resource options, and futures.

Source: https://university.eugo.io/topics/sdk-api

---

## Courses

- [Distributed Python with eugo.hpc](https://university.eugo.io/courses/distributed-python-with-eugo-hpc.md): Turn ordinary Python into distributed work with a decorator, then scale it across a cluster.

## Videos

- [The distribute decorator, explained](https://university.eugo.io/videos/the-distribute-decorator.md): What @eugo.hpc.distribute actually changes about a function, and why the call site stays clean.
- [Working with futures without blocking](https://university.eugo.io/videos/futures-without-blocking.md): The most common performance mistake in distributed code, and the two-line habit that avoids it.
- [Requesting GPUs per task](https://university.eugo.io/videos/requesting-gpus-per-task.md): Use .options() to ask for GPUs on the calls that need them, and only those.
- [Actors for stateful work](https://university.eugo.io/videos/actors-for-stateful-work.md): When a task is the wrong shape: keeping an expensive object alive across many calls.

## Vocabulary

- **Actor** — A distributed object that holds state across many calls. Created by applying the distribute decorator to a class rather than a function.
- **distribute decorator** — The eugo.hpc decorator that turns a function into a distributed task, or a class into an actor. A decorated call returns a future instead of a value.
- **eugo.hpc** — The Python module holding Eugo’s distributed-compute API. The top-level eugo namespace is deliberately empty; everything lives under eugo.hpc.
- **Future** — A handle to a result that does not exist yet. Calling a distributed function returns a future immediately, while the work happens elsewhere.
- **get()** — The eugo.hpc call that resolves one or more futures into actual values, blocking until they are ready.
- **options()** — The method that sets per-call resource requirements on a distributed function, such as num_cpus or num_gpus.
- **Task** — One unit of distributed work: a single call to a function decorated with the distribute decorator. Tasks are stateless, so each call starts fresh.

