Skip to main content

A library for distributing computational workloads across multiple devices

Project description

PyPI Downloads Downloads License: MIT

Distributed Compute

A Python library for distributing computational workloads across multiple devices on a local network. Allows you to utilize your spare computers into a computing cluster to perform complex tasks that would require a lot of computing power and making it easy to connect devices locally.

Features

  • Interactive CLI - For monitoring worker health (CPU usage, task counts, active workers), and trigger Python script runs.
  • Load Balancing - Tasks distributed to least-loaded workers
  • Fault Tolerance - Automatic task redistribution on worker failure
  • Authentication - Coordinator can now create a password that is required for the workers to connect to.

Installation

Install via pip (Python 3.7+):

pip install distributed-compute-locally

Quick Start

1. Start the Coordinator

On your main machine:

distcompute coordinator

This starts an interactive coordinator with a beautiful CLI where you can run commands, check status, and execute tasks directly.

2. Connect Workers

On each worker machine (laptops, desktops, etc.):

distcompute worker <coordinator-ip>

Or on the same machine for local testing:

distcompute worker
# Defaults to localhost

Example with remote coordinator:

distcompute worker 192.168.1.100

3. Run Your Computation

from distributed_compute import Coordinator

# Initialize coordinator
coordinator = Coordinator(port=5555)
coordinator.start()

# Define your compute function
def heavy_computation(x):
    return x ** 2

# Distribute work across all connected workers
results = coordinator.map(heavy_computation, range(1000))
print(results)  # [0, 1, 4, 9, 16, ...]

That's it! Your computation is now running across all connected machines.

CLI Commands

The distcompute command provides several options:

# Start coordinator (with interactive mode)
distcompute coordinator [port]

# Connect worker (host defaults to localhost)
distcompute worker [host] [port] [name]

# Run demo
distcompute demo

When you start the coordinator, it now launches an interactive terminal with a beautiful CLI interface (powered by Rich and prompt_toolkit):

distcompute coordinator

You'll see a prompt where you can run commands:

distcompute> help

Available Commands:
  run <file.py>  - Execute a task file across workers
  status         - Show cluster status with worker stats
  help           - Show this help message
  exit           - Shutdown coordinator

Example task file:

def monte_carlo_pi(num_samples):
    import random
    inside = 0
    for _ in range(num_samples):
        x, y = random.random(), random.random()
        if x*x + y*y <= 1.0:
            inside += 1
    return inside

TASK_FUNC = monte_carlo_pi
ITERABLE = [1_000_000 for _ in range(20)]  # 20 tasks, each with 1 million samples

Running tasks interactively:

distcompute> status
┌─────────────────────────────────────┐
│         Cluster Status              │
├────────────────┬────────────────────┤
│ Metric         │ Value              │
├────────────────┼────────────────────┤
│ Workers        │ 2                  │
│ Tasks Pending  │ 0                  │
│ Tasks Completed│ 20                 │
└────────────────┴────────────────────┘

┌────────────────────────────────────────────────────────┐
│              Worker Details                            │
├──────────────┬────────────┬─────────────┬──────────────┤
│ Worker       │ CPU %      │ Tasks Done  │ Active       │
├──────────────┼────────────┼─────────────┼──────────────┤
│ worker-1     │ 25.4%      │ 12          │ 0            │
│ worker-2     │ 18.7%      │ 8           │ 0            │
└──────────────┴────────────┴─────────────┴──────────────┘

distcompute> run my_task.py
Running my_task.py across 2 worker(s)...
✓ Results: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, ...]

distcompute> exit
Shutting down coordinator...

Requirements

  • Python 3.7 or higher
  • Network connectivity between machines
  • Same Python environment on all workers (recommended)
  • prompt_toolkit>=3.0.0 and rich>=13.0.0 (auto-installed for interactive CLI)

Troubleshooting

Workers not connecting?

  • Ensure port 5555 (default) is open on the coordinator machine
  • Check firewall settings
  • Verify machines are on the same network
  • Try specifying IP explicitly: distcompute worker 192.168.1.100

Tasks failing?

  • Ensure all workers have required dependencies installed
  • Check worker logs for error messages
  • Verify functions are serializable (no lambdas with external state)

Contributing

Contributions are welcome! This project aims to make distributed computing accessible to everyone.

License

MIT License - see LICENSE file for details.

Acknowledgments

This project is heavily inspired by Dask, and powered by Python's cloudpickle for function serialization, psutil for resource monitoring, Rich and prompt_toolkit for providing a live cluster dashboard (CPU/Memory/Task stats).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

distributed_compute_locally-0.1.6.tar.gz (41.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

distributed_compute_locally-0.1.6-py3-none-any.whl (25.4 kB view details)

Uploaded Python 3

File details

Details for the file distributed_compute_locally-0.1.6.tar.gz.

File metadata

File hashes

Hashes for distributed_compute_locally-0.1.6.tar.gz
Algorithm Hash digest
SHA256 70d7e8b1f19b9520f5410c2e4fc3605d367a6afe4c556c68734b1c77f367c5c9
MD5 8aa64d2d3e4d1fd6e6aac7d26f5c065e
BLAKE2b-256 222a4c104b9a250a815397ba2a391bc218a2b3639725ee13264456815d8ec167

See more details on using hashes here.

File details

Details for the file distributed_compute_locally-0.1.6-py3-none-any.whl.

File metadata

File hashes

Hashes for distributed_compute_locally-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 ff1a6ea11f071f8772760033e012c538ef7da33b7f83090e946be4107c778171
MD5 928e27f4306fcc4e38bcfa995dc040fc
BLAKE2b-256 d8169fb0ce3f9cd7d25e736d641d5c6359dfc9b63687440b6bb71c97a87afe67

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page