Elegant multiprocessing without the boilerplate and confusing syntax
Project description
multiprocessing-wrap
A simple interface for writing concurrent scripts. Get the most out of multiprocessing
without all the boilerplate and confusing syntax!
Features
- Sensible error propagation - having a stack trace showing where your code speeds debugging and development
- Built-in loading bar as default using tqdm
- Uses dill for pickling, which extends the types that can be passed to your workers (see here for documentation of the limitations of python's default pickling)
Installation
To install using pip:
pip install multiprocessing-wrap
Usage
You can use the functional multiprocess
for single line multiprocessing:
from multiprocess import multiprocess
f = lambda: print(1)
multiprocess(f, [(), (), ()])
1
1
1
Otherwise you can use the Multiprocess
class to use the more explicit add_tasks
and do_tasks
directives:
from multiprocess import Multiprocess
m = Multiprocess(show_loading_bar=False)
f = lambda: print(1)
m.add_tasks(f, [(), (), ()])
m.do_tasks() # blocking
m.close()
A more involved example of sorting numbers using sleep
. Since the worker function is run in a different process, to transfer data between the processes we use a thread-safe Queue
. Note the following only works if you have at least 2 threads:
from multiprocess import multiprocess, Queue
from time import sleep
def sleep_sort():
q = Queue()
def f(q, x):
sleep(x)
q.push(x)
multiprocess(f, [(q, 1,), (q, 2,)])
print('SORTED')
while not q.empty():
print(q.pop())
sleep_sort()
1
2
Error handling
Errors from within a process are propagated back to the parent with stack information. For example:
from multiprocess import Multiprocess
m = Multiprocess()
def f(x):
raise ValueError('bad error')
m.add_tasks(f, [(1,)])
m.do_tasks()
m.close()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/dom/Documents/git/Multiprocess/multiprocess/multiprocessClass.py", line 61, in do_tasks
self._check_for_exceptions()
File "/Users/dom/Documents/git/Multiprocess/multiprocess/multiprocessClass.py", line 79, in _check_for_exceptions
"\n".join(['ERROR: ' + str(e) for e in exceptions]))
multiprocess.multiprocessClass.MultiprocessProcessException: 1 errors occurred:
ERROR: Error in function call "f((1,))"
Traceback (most recent call last):
File "/Users/dom/Documents/git/Multiprocess/multiprocess/multiprocessClass.py", line 95, in my_worker
fn(*rem_args)
File "<stdin>", line 2, in f
ValueError: bad errorr
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
Built Distribution
File details
Details for the file multiprocessing_wrap-0.0.3.tar.gz
.
File metadata
- Download URL: multiprocessing_wrap-0.0.3.tar.gz
- Upload date:
- Size: 4.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4497d841cbcedda2a3f6b4592d94d859c4d1d660145e7f8674dc1581d4ecb934 |
|
MD5 | b7b9ca4acabb7ebd48ae541eef4fd6f9 |
|
BLAKE2b-256 | 2d33121a72638608bed986c1dbfcc01b0f61f8c2a49bae53f7d40025dd3c619c |
File details
Details for the file multiprocessing_wrap-0.0.3-py3-none-any.whl
.
File metadata
- Download URL: multiprocessing_wrap-0.0.3-py3-none-any.whl
- Upload date:
- Size: 4.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4139db31968493d7e7b1dcff0e98314b3ab9c0f36776446bf42a253bfd890607 |
|
MD5 | b9310c75c808eac05fee886ab05bcd1b |
|
BLAKE2b-256 | 913f9143c8dee6c76c7ddc4827685abe5cf23397988a05e6a8e09a4badb7fe69 |