Skip to navigation

nemo_gym.web.browser_instance_pool

View as MarkdownOpen in Claude

Lease browser instances from a pool of local processes, one X display each.

Each slot is an Xvfb display plus a nemo_gym.web.browser_instance server started with that display, so one resources server can hold as many headed PyAutoGUI sessions as it has slots. A slot serves one session at a time; after release it is reused only if its instance is idle and healthy, and is restarted otherwise. Instances exit on their own when this process dies.

Module Contents

Classes

NameDescription
LocalBrowserInstancePoolProviderServe leases from size local browser instances.
_LaunchRollbackErrorA partial instance could not be confirmed stopped after launch failed.
_Slot-

Data

LOG

API

class nemo_gym.web.browser_instance_pool.LocalBrowserInstancePoolProvider(
size: int,
port_base: int,
display_base: int = 100,
host: str = '127.0.0.1',
log_dir: str = 'cache/visual-browser/insta...,
python: str | None = None,
screen: str = '1920x1080x24',
startup_timeout_seconds: float = 120.0,
request_timeout_seconds: float = 600.0
)

Serve leases from size local browser instances.

The resources server’s max_sessions should equal size; the session manager rejects seeds beyond it before asking for a lease.

_close_task
Task[None] | None = None
_idle
Queue[_Slot] | None = None
_leased
dict[int, _Slot] = {}
_lifecycle_lock
= asyncio.Lock()
_log_dir
= Path(log_dir).expanduser().resolve()
_python
= python or sys.executable
_recycling
dict[tuple[int, int], Task[None]] = {}
_slots
_startup_cleanup
Task[None] | None = None
name
= 'local_instance_pool'
nemo_gym.web.browser_instance_pool.LocalBrowserInstancePoolProvider._close() -> None
async
nemo_gym.web.browser_instance_pool.LocalBrowserInstancePoolProvider._idle_and_healthy(
) -> bool
nemo_gym.web.browser_instance_pool.LocalBrowserInstancePoolProvider._launch(
) -> None
nemo_gym.web.browser_instance_pool.LocalBrowserInstancePoolProvider._launch_slot(
) -> None
nemo_gym.web.browser_instance_pool.LocalBrowserInstancePoolProvider._recycle(
key: tuple[int, int],
) -> None
async
nemo_gym.web.browser_instance_pool.LocalBrowserInstancePoolProvider._rollback_start(
launches: asyncio.Future
) -> None
async
nemo_gym.web.browser_instance_pool.LocalBrowserInstancePoolProvider._stop(
) -> None
staticmethod
nemo_gym.web.browser_instance_pool.LocalBrowserInstancePoolProvider.acquire(
async
nemo_gym.web.browser_instance_pool.LocalBrowserInstancePoolProvider.close() -> None
async
nemo_gym.web.browser_instance_pool.LocalBrowserInstancePoolProvider.release(
) -> None
async
nemo_gym.web.browser_instance_pool.LocalBrowserInstancePoolProvider.start() -> None
async
class nemo_gym.web.browser_instance_pool._LaunchRollbackError()

Bases: BrowserSessionError

A partial instance could not be confirmed stopped after launch failed.

class nemo_gym.web.browser_instance_pool._Slot(
index: int,
display: str,
port: int,
token: str = '',
xvfb: subprocess.Popen[bytes] | None = None,
server: subprocess.Popen[bytes] | None = None,
tmpdir: pathlib.Path | None = None,
leases: int = 0,
restarts: int = 0
)
Dataclass
display
str
index
int
leases
int = 0
port
int
restarts
int = field(default=0)
server
Popen[bytes] | None = None
tmpdir
Path | None = None
token
str = ''
xvfb
Popen[bytes] | None = None
nemo_gym.web.browser_instance_pool.LOG = logging.getLogger('nemo_gym.web.browser_instance_pool')