Skip to main content

Switch from serial to parallel computing without requiring any code modifications.

Project description

ray-ease

Home · Report Bug · Request Feature · Useful Examples · License
Switch from serial to parallel computing without requiring any code modifications.

About the project

This package is a convenient Ray wrapper that enables the utilization of Ray decorated functions and actors as if they were regular local functions. With this tool, your program can seamlessly run in both parallel and serial modes without requiring any code modifications. This capability is particularly advantageous during the debugging phase, as parallelizing code may inadvertently introduce unnecessary complexities and overhead.

Installation

$ pip install ray-ease

Usage

Effortlessly parallelize your code by simply decorating your functions or classes with the parallelize decorator. Retrieve the results using the retrieve function. This enables you to parallelize your code with Ray, default behavior of the init function, or run it serially without any overhead from Ray with rez.init(config="serial").

[!NOTE]
To explore additional useful examples, please refer to the dedicated folder designated for this purpose.

Running a Task

import ray_ease as rez

rez.init()

# Define the square task.
@rez.parallelize
def square(x):
    return x * x

# Launch four parallel square tasks.
futures = [square(i) for i in range(4)]

# Retrieve results.
print(rez.retrieve(futures))
# -> [0, 1, 4, 9]

See Ray version for comparison.

Calling an Actor

import ray_ease as rez

rez.init()

# Define the Counter actor.
@rez.parallelize
class Counter:
    def __init__(self):
        self.i = 0

    def get(self):
        return self.i

    def incr(self, value):
        self.i += value

# Create a Counter actor.
c = Counter()

# Submit calls to the actor. These calls run asynchronously but in
# submission order on the remote actor process.
for _ in range(10):
    c.incr(1)

# Retrieve final actor state.
print(rez.retrieve(c.get()))
# -> 10

See Ray version for comparison.

Comparison with and without Ray

Parallel computation with Ray (see base example):

import time
import ray_ease as rez

rez.init(num_cpus=4) # Initialize Ray and specify this system has 4 CPUs.

@rez.parallelize
def do_some_work(x):
    time.sleep(1) # Replace this with work you need to do.
    return x

start = time.time()
results = rez.retrieve([do_some_work(x) for x in range(4)])
print("duration =", time.time() - start)
print("results =", results)

This yields the following output:

duration = 1.0233514308929443
results =  [0, 1, 2, 3]

As opposed to serial computation, obtained by specifying to ray_ease to use the serial config with rez.init("serial"):

import time
import ray_ease as rez

rez.init("serial")

@rez.parallelize
def do_some_work(x):
    time.sleep(1) # Replace this with work you need to do.
    return x

start = time.time()
results = rez.retrieve([do_some_work(x) for x in range(4)])
print("duration =", time.time() - start)
print("results =", results)

The outputs provide confirmation that the execution was carried out sequentially, taking approximately four times longer than before:

duration = 4.021065711975098
results =  [0, 1, 2, 3]

(back to top)

Contributing

Interested in contributing? Check out the contributing guidelines. Please note that this project is released with a Code of Conduct. By contributing to this project, you agree to abide by its terms.

(back to top)

License

ray-ease was created by Arthur Elskens. It is licensed under the terms of the MIT license. See LICENSE for more information.

(back to top)

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

ray_ease-0.2.7.tar.gz (11.8 kB view details)

Uploaded Source

Built Distribution

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

ray_ease-0.2.7-py2.py3-none-any.whl (8.9 kB view details)

Uploaded Python 2Python 3

File details

Details for the file ray_ease-0.2.7.tar.gz.

File metadata

  • Download URL: ray_ease-0.2.7.tar.gz
  • Upload date:
  • Size: 11.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.10.12

File hashes

Hashes for ray_ease-0.2.7.tar.gz
Algorithm Hash digest
SHA256 9fb32569535183481e256f388e8ad88c9165e313e657044d2ec712e26e9814ac
MD5 adf4c177c3160986e3f0eae854abeb74
BLAKE2b-256 7528b5dbcb8ac427682adfdb781b10e5bb2ac5d5220063756659313f43c4779f

See more details on using hashes here.

File details

Details for the file ray_ease-0.2.7-py2.py3-none-any.whl.

File metadata

  • Download URL: ray_ease-0.2.7-py2.py3-none-any.whl
  • Upload date:
  • Size: 8.9 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.10.12

File hashes

Hashes for ray_ease-0.2.7-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 67ffffd0ea142d58ccc39226ef510205ca44745207296e55ee51a3ac2c9ab2c3
MD5 f087f80d70584fcd557a3895b327b2ff
BLAKE2b-256 869b4c762a2c54d823768ab2014827f77488d88072c4c071d8b1ab8c61cdfaab

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