Establish a connection to the errand-boy deamon to execute commands without the memory overhead incurred by os.fork().
Project description
What does it do?
Uses Python multiprocessing to maintain a pool of worker processes used to execute arbitrary terminal commands.
Why not use subprocess.Popen()?
Under the hood subprocess.Popen() uses os.fork(), which copies the currently running process’ memory before launching the command you want to run. If your process uses a lot of memory, such as a Celery worker using an eventlet pool, this can cause a “Cannot allocate memory” error.
errand-boy still uses subprocess.Popen(), but tries to keep a low memory footprint. Your celery greenthread workers can communicate with it via asynchronous network calls.
Further reading:
Setup
Install:
pip install errand-boy
# optional pip install setproctitle
Usage
Run tests:
cd errand-boy/ python -m unittest discover
Run server:
python -m errand_boy.run
Run client (useful for testing/debugging):
python -m errand_boy.run 'ls -al'
Use the client in your code:
from errand_boy.transports.unixsocket import UNIXSocketTransport errand_boy_transport = UNIXSocketTransport() stdout, stderr, returncode = errand_boy_transport.run_cmd('ls -al') print stdout print stderr print returncode
Use a subprocess.Popen-like interface:
from errand_boy.transports.unixsocket import UNIXSocketTransport errand_boy_transport = UNIXSocketTransport() with errand_boy_transport.get_session() as session: process = session.subprocess.Popen('ls -al', stdout=session.subprocess.PIPE, stderr=session.subprocess.PIPE, shell=True, close_fds=True) process_stdout, process_stderr = process.communicate() returncode = process.returncode print stdout print stderr print returncode
Run load tests:
python -m errand_boy.run --max-accepts=0 pip install Fabric locustio cd errand-boy/ fab locust_local
Does it work in other languages?
The client/server use an HTTP-inspired protocol, but the data that’s sent back and forth is currently serialized using Python’s Pickle format. Support could be added for other serialization types though.
Development
Further reading:
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file errand-boy-0.3.4.tar.gz
.
File metadata
- Download URL: errand-boy-0.3.4.tar.gz
- Upload date:
- Size: 9.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4fb8377b1fbe2f5beb413d1ccd70d146aec4c5450aef1f1d7815d05a2e360417 |
|
MD5 | 9652ff50da5c8cd0a678f8b7d231a81f |
|
BLAKE2b-256 | 9cd5a107088c5e2dbec7d38b1a2448cd577c678fd81419bd0ab824c4c06953e3 |