File: timeouts.rst

package info (click to toggle)
mpire 2.10.2-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,064 kB
  • sloc: python: 5,473; makefile: 209; javascript: 182
file content (50 lines) | stat: -rw-r--r-- 1,865 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
.. _timeouts:

Timeouts
========

Timeouts can be set separately for the target, ``worker_init`` and ``worker_exit`` functions. When a timeout has been
set and reached, it will throw a ``TimeoutError``:

.. code-block:: python

    # Will raise TimeoutError, provided that the target function takes longer
    # than half a second to complete
    with WorkerPool(n_jobs=5) as pool:
        pool.map(time_consuming_function, range(10), task_timeout=0.5)

    # Will raise TimeoutError, provided that the worker_init function takes longer
    # than 3 seconds to complete or the worker_exit function takes longer than
    # 150.5 seconds to complete
    with WorkerPool(n_jobs=5) as pool:
        pool.map(time_consuming_function, range(10), worker_init=init, worker_exit=exit_,
                 worker_init_timeout=3.0, worker_exit_timeout=150.5)

Use ``None`` (=default) to disable timeouts.

``imap`` and ``imap_unordered``
-------------------------------

When you're using one of the lazy map functions (e.g., ``imap`` or ``imap_unordered``) then an exception will only be
raised when the function is actually running. E.g. when executing:

.. code-block:: python

    with WorkerPool(n_jobs=5) as pool:
        results = pool.imap(time_consuming_function, range(10), task_timeout=0.5)

this will never raise. This is because ``imap`` and ``imap_unordered`` return a generator object, which stops executing
until it gets the trigger to go beyond the ``yield`` statement. When iterating through the results, it will raise as
expected:

.. code-block:: python

    with WorkerPool(n_jobs=5) as pool:
        results = pool.imap(time_consuming_function, range(10), task_timeout=0.5)
        for result in results:
            ...

Threading
---------

When using ``threading`` as start method MPIRE won't be able to interrupt certain functions, like ``time.sleep``.