glemaitre: Uhm some of the errors are cryptic. Any idea what is the impact of this PR on the `hash`?
tomMoral: I don't know what are these failures. It does not look like it is related to this PR.
codecov[bot]: # [Codecov](https://codecov.io/gh/joblib/joblib/pull/985?src=pr&el=h1) Report
> Merging [#985](https://codecov.io/gh/joblib/joblib/pull/985?src=pr&el=desc) into [master](https://codecov.io/gh/joblib/joblib/commit/1753c3bcb1d8430439ce48a1ef4e866166f34296?src=pr&el=desc) will **decrease** coverage by `3.14%`.
> The diff coverage is `100%`.

[![Impacted file tree graph](https://codecov.io/gh/joblib/joblib/pull/985/graphs/tree.svg?width=650&token=gA6LF5DGTW&height=150&src=pr)](https://codecov.io/gh/joblib/joblib/pull/985?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##           master     #985      +/-   ##
==========================================
- Coverage    95.4%   92.25%   -3.15%     
==========================================
  Files          45       45              
  Lines        6634     6640       +6     
==========================================
- Hits         6329     6126     -203     
- Misses        305      514     +209
```


| [Impacted Files](https://codecov.io/gh/joblib/joblib/pull/985?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [joblib/test/test\_parallel.py](https://codecov.io/gh/joblib/joblib/pull/985/diff?src=pr&el=tree#diff-am9ibGliL3Rlc3QvdGVzdF9wYXJhbGxlbC5weQ==) | `94% <100%> (-2.75%)` | :arrow_down: |
| [joblib/parallel.py](https://codecov.io/gh/joblib/joblib/pull/985/diff?src=pr&el=tree#diff-am9ibGliL3BhcmFsbGVsLnB5) | `96.42% <100%> (-0.81%)` | :arrow_down: |
| [joblib/test/common.py](https://codecov.io/gh/joblib/joblib/pull/985/diff?src=pr&el=tree#diff-am9ibGliL3Rlc3QvY29tbW9uLnB5) | `64.4% <0%> (-23.73%)` | :arrow_down: |
| [joblib/backports.py](https://codecov.io/gh/joblib/joblib/pull/985/diff?src=pr&el=tree#diff-am9ibGliL2JhY2twb3J0cy5weQ==) | `79.16% <0%> (-14.59%)` | :arrow_down: |
| [joblib/test/test\_hashing.py](https://codecov.io/gh/joblib/joblib/pull/985/diff?src=pr&el=tree#diff-am9ibGliL3Rlc3QvdGVzdF9oYXNoaW5nLnB5) | `86.17% <0%> (-12.77%)` | :arrow_down: |
| [joblib/pool.py](https://codecov.io/gh/joblib/joblib/pull/985/diff?src=pr&el=tree#diff-am9ibGliL3Bvb2wucHk=) | `80.17% <0%> (-11.21%)` | :arrow_down: |
| [joblib/test/test\_memmapping.py](https://codecov.io/gh/joblib/joblib/pull/985/diff?src=pr&el=tree#diff-am9ibGliL3Rlc3QvdGVzdF9tZW1tYXBwaW5nLnB5) | `88.49% <0%> (-10.69%)` | :arrow_down: |
| [joblib/testing.py](https://codecov.io/gh/joblib/joblib/pull/985/diff?src=pr&el=tree#diff-am9ibGliL3Rlc3RpbmcucHk=) | `87.5% <0%> (-7.5%)` | :arrow_down: |
| [joblib/\_memmapping\_reducer.py](https://codecov.io/gh/joblib/joblib/pull/985/diff?src=pr&el=tree#diff-am9ibGliL19tZW1tYXBwaW5nX3JlZHVjZXIucHk=) | `87.77% <0%> (-7.23%)` | :arrow_down: |
| [joblib/disk.py](https://codecov.io/gh/joblib/joblib/pull/985/diff?src=pr&el=tree#diff-am9ibGliL2Rpc2sucHk=) | `76.66% <0%> (-5%)` | :arrow_down: |
| ... and [13 more](https://codecov.io/gh/joblib/joblib/pull/985/diff?src=pr&el=tree-more) | |

------

[Continue to review full report at Codecov](https://codecov.io/gh/joblib/joblib/pull/985?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/joblib/joblib/pull/985?src=pr&el=footer). Last update [1753c3b...e95e419](https://codecov.io/gh/joblib/joblib/pull/985?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

glemaitre: @ogrisel any idea about the other failure in Travis?
ogrisel: I am having a look in this PR: https://github.com/joblib/joblib/pull/986

I have even weirder failures on my local machine...
tomMoral: This seems to be due to the new release of coverage: https://github.com/pymc-devs/pymc3/issues/3735

pinning coverage to `coverage<5.0` did the trick for `pymc3`.
glemaitre: I pinned coverage. I think that the original issue could be the following: https://github.com/nedbat/coveragepy/issues/883
glemaitre: Fixed conflict. This should be fine now.
ogrisel: The new test need to be decorated with `@with_multiprocessing`.
ogrisel: Also please document the change in the changelog.
glemaitre: Failure is only a timeout.
ogrisel: Changelog?
diff --git a/CHANGES.rst b/CHANGES.rst
index cc0f542..fdfe8d2 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -1,6 +1,13 @@
 Latest changes
 ==============
 
+Release 0.14.2
+--------------
+
+- Fix the number of jobs reported by ``effective_n_jobs`` when ``n_jobs=None``
+  called in a parallel backend context.
+  https://github.com/joblib/joblib/pull/985
+
 Release 0.14.1
 --------------
 
diff --git a/continuous_integration/travis/install.sh b/continuous_integration/travis/install.sh
index 96ddb91..a45c0be 100755
--- a/continuous_integration/travis/install.sh
+++ b/continuous_integration/travis/install.sh
@@ -91,6 +91,7 @@ if [ -n "$NUMPY_VERSION" ]; then
 fi
 
 if [[ "$COVERAGE" == "true" ]]; then
+    # TODO: unpin when https://github.com/nedbat/coveragepy/issues/883 is fixed
     # Weird issues with recent version of coverage: unpin when not causing
     # pytest to raise INTERNALERROR exceptions.
     PIP_INSTALL_PACKAGES="$PIP_INSTALL_PACKAGES coverage==4.5.4 pytest-cov codecov"
diff --git a/joblib/parallel.py b/joblib/parallel.py
index b673425..16b0b89 100644
--- a/joblib/parallel.py
+++ b/joblib/parallel.py
@@ -385,7 +385,9 @@ def effective_n_jobs(n_jobs=-1):
     .. versionadded:: 0.10
 
     """
-    backend, _ = get_active_backend()
+    backend, backend_n_jobs = get_active_backend()
+    if n_jobs is None:
+        n_jobs = backend_n_jobs
     return backend.effective_n_jobs(n_jobs=n_jobs)
 
 

Wrong number of workers reported by effective_n_jobs
I want to highlight something which looks weird to me (not sure yet if this is a bug). I made a snippet which is a pattern that we use in scikit-learn.

```python
from joblib import Parallel, delayed, effective_n_jobs, parallel_backend
from joblib.parallel import get_active_backend


def func(x):
    return x ** 2


class Klass:
    def __init__(self, n_jobs=None):
        self.n_jobs = n_jobs

    def func(self, x):
        n_jobs = effective_n_jobs(self.n_jobs)
        print(
            f"Number of effective jobs found: {effective_n_jobs(self.n_jobs)}"
        )
        backend, backend_n_jobs = get_active_backend()
        print(
            f"Current backend used: {backend}"
        )
        print(
            f"Number of jobs in the backend: {backend_n_jobs}"
        )
        return Parallel(n_jobs=n_jobs)(delayed(func)(i) for i in x)


n_jobs = 4
with parallel_backend("threading", n_jobs=n_jobs):
    r = Klass().func(range(10))
```

```
Number of effective jobs found: 1
Current backend used: <joblib._parallel_backends.ThreadingBackend object at 0x7f946468d810>
Number of jobs in the backend: 4
```

If I am not wrong, one would expect to make the `Parallel` call with `n_jobs=4`. However, `effective_n_jobs` will report `n_jobs=1` due to:

https://github.com/joblib/joblib/blob/1753c3bcb1d8430439ce48a1ef4e866166f34296/joblib/_parallel_backends.py#L232-L235

I would have expected `parallel_backend` to overwrite the number of jobs if not specified in the estimator but I am not sure about it.

NB: found during investigating https://github.com/scikit-learn/scikit-learn/issues/15978
diff --git a/joblib/test/test_parallel.py b/joblib/test/test_parallel.py
index 317ce4f..a7bec44 100644
--- a/joblib/test/test_parallel.py
+++ b/joblib/test/test_parallel.py
@@ -152,6 +152,23 @@ def test_effective_n_jobs():
     assert effective_n_jobs() > 0
 
 
+@pytest.mark.parametrize(
+    "backend_n_jobs, expected_n_jobs",
+    [(3, 3), (-1, effective_n_jobs(n_jobs=-1)), (None, 1)],
+    ids=["positive-int", "negative-int", "None"]
+)
+@with_multiprocessing
+def test_effective_n_jobs_None(backend_n_jobs, expected_n_jobs):
+    # check the number of effective jobs when `n_jobs=None`
+    # non-regression test for https://github.com/joblib/joblib/issues/984
+    with parallel_backend("threading", n_jobs=backend_n_jobs):
+        # when using a backend, the default of number jobs will be the one set
+        # in the backend
+        assert effective_n_jobs(n_jobs=None) == expected_n_jobs
+    # without any backend, None will default to a single job
+    assert effective_n_jobs(n_jobs=None) == 1
+
+
 ###############################################################################
 # Test parallel
 

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest pytest-cov
apt-get update apt-get install -y gcc
3.6
requirements/base.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
certifi==2021.5.30
coverage==6.2
importlib-metadata==4.8.3
iniconfig==1.1.1
-e git+https://github.com/joblib/joblib.git@12c2b2bae071a2203edf181bad3e6059cde53463#egg=joblib
packaging==21.3
pluggy==1.0.0
py==1.11.0
pyparsing==3.1.4
pytest==7.0.1
pytest-cov==4.0.0
tomli==1.2.3
typing_extensions==4.1.1
zipp==3.6.0

name: joblib
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==22.2.0
      - coverage==6.2
      - importlib-metadata==4.8.3
      - iniconfig==1.1.1
      - packaging==21.3
      - pluggy==1.0.0
      - py==1.11.0
      - pyparsing==3.1.4
      - pytest==7.0.1
      - pytest-cov==4.0.0
      - tomli==1.2.3
      - typing-extensions==4.1.1
      - zipp==3.6.0
prefix: /opt/conda/envs/joblib

joblib/test/test_parallel.py::test_effective_n_jobs_None[positive-int] joblib/test/test_parallel.py::test_effective_n_jobs_None[negative-int]
joblib/test/test_parallel.py::test_cpu_count joblib/test/test_parallel.py::test_effective_n_jobs joblib/test/test_parallel.py::test_effective_n_jobs_None[None] joblib/test/test_parallel.py::test_simple_parallel[2-1-None] joblib/test/test_parallel.py::test_simple_parallel[2-1-loky] joblib/test/test_parallel.py::test_simple_parallel[2-1-multiprocessing] joblib/test/test_parallel.py::test_simple_parallel[2-1-sequential] joblib/test/test_parallel.py::test_simple_parallel[2-1-threading] joblib/test/test_parallel.py::test_simple_parallel[2-1-backend5] joblib/test/test_parallel.py::test_simple_parallel[2-1-backend6] joblib/test/test_parallel.py::test_simple_parallel[2-1-backend7] joblib/test/test_parallel.py::test_simple_parallel[2-1-backend8] joblib/test/test_parallel.py::test_simple_parallel[2-1-backend9] joblib/test/test_parallel.py::test_simple_parallel[2-2-None] joblib/test/test_parallel.py::test_simple_parallel[2-2-loky] joblib/test/test_parallel.py::test_simple_parallel[2-2-multiprocessing] joblib/test/test_parallel.py::test_simple_parallel[2-2-sequential] joblib/test/test_parallel.py::test_simple_parallel[2-2-threading] joblib/test/test_parallel.py::test_simple_parallel[2-2-backend5] joblib/test/test_parallel.py::test_simple_parallel[2-2-backend6] joblib/test/test_parallel.py::test_simple_parallel[2-2-backend7] joblib/test/test_parallel.py::test_simple_parallel[2-2-backend8] joblib/test/test_parallel.py::test_simple_parallel[2-2-backend9] joblib/test/test_parallel.py::test_simple_parallel[2--1-None] joblib/test/test_parallel.py::test_simple_parallel[2--1-loky] joblib/test/test_parallel.py::test_simple_parallel[2--1-multiprocessing] joblib/test/test_parallel.py::test_simple_parallel[2--1-sequential] joblib/test/test_parallel.py::test_simple_parallel[2--1-threading] joblib/test/test_parallel.py::test_simple_parallel[2--1-backend5] joblib/test/test_parallel.py::test_simple_parallel[2--1-backend6] joblib/test/test_parallel.py::test_simple_parallel[2--1-backend7] joblib/test/test_parallel.py::test_simple_parallel[2--1-backend8] joblib/test/test_parallel.py::test_simple_parallel[2--1-backend9] joblib/test/test_parallel.py::test_simple_parallel[2--2-None] joblib/test/test_parallel.py::test_simple_parallel[2--2-loky] joblib/test/test_parallel.py::test_simple_parallel[2--2-multiprocessing] joblib/test/test_parallel.py::test_simple_parallel[2--2-sequential] joblib/test/test_parallel.py::test_simple_parallel[2--2-threading] joblib/test/test_parallel.py::test_simple_parallel[2--2-backend5] joblib/test/test_parallel.py::test_simple_parallel[2--2-backend6] joblib/test/test_parallel.py::test_simple_parallel[2--2-backend7] joblib/test/test_parallel.py::test_simple_parallel[2--2-backend8] joblib/test/test_parallel.py::test_simple_parallel[2--2-backend9] joblib/test/test_parallel.py::test_simple_parallel[11-1-None] joblib/test/test_parallel.py::test_simple_parallel[11-1-loky] joblib/test/test_parallel.py::test_simple_parallel[11-1-multiprocessing] joblib/test/test_parallel.py::test_simple_parallel[11-1-sequential] joblib/test/test_parallel.py::test_simple_parallel[11-1-threading] joblib/test/test_parallel.py::test_simple_parallel[11-1-backend5] joblib/test/test_parallel.py::test_simple_parallel[11-1-backend6] joblib/test/test_parallel.py::test_simple_parallel[11-1-backend7] joblib/test/test_parallel.py::test_simple_parallel[11-1-backend8] joblib/test/test_parallel.py::test_simple_parallel[11-1-backend9] joblib/test/test_parallel.py::test_simple_parallel[11-2-None] joblib/test/test_parallel.py::test_simple_parallel[11-2-loky] joblib/test/test_parallel.py::test_simple_parallel[11-2-multiprocessing] joblib/test/test_parallel.py::test_simple_parallel[11-2-sequential] joblib/test/test_parallel.py::test_simple_parallel[11-2-threading] joblib/test/test_parallel.py::test_simple_parallel[11-2-backend5] joblib/test/test_parallel.py::test_simple_parallel[11-2-backend6] joblib/test/test_parallel.py::test_simple_parallel[11-2-backend7] joblib/test/test_parallel.py::test_simple_parallel[11-2-backend8] joblib/test/test_parallel.py::test_simple_parallel[11-2-backend9] joblib/test/test_parallel.py::test_simple_parallel[11--1-None] joblib/test/test_parallel.py::test_simple_parallel[11--1-loky] joblib/test/test_parallel.py::test_simple_parallel[11--1-multiprocessing] joblib/test/test_parallel.py::test_simple_parallel[11--1-sequential] joblib/test/test_parallel.py::test_simple_parallel[11--1-threading] joblib/test/test_parallel.py::test_simple_parallel[11--1-backend5] joblib/test/test_parallel.py::test_simple_parallel[11--1-backend6] joblib/test/test_parallel.py::test_simple_parallel[11--1-backend7] joblib/test/test_parallel.py::test_simple_parallel[11--1-backend8] joblib/test/test_parallel.py::test_simple_parallel[11--1-backend9] joblib/test/test_parallel.py::test_simple_parallel[11--2-None] joblib/test/test_parallel.py::test_simple_parallel[11--2-loky] joblib/test/test_parallel.py::test_simple_parallel[11--2-multiprocessing] joblib/test/test_parallel.py::test_simple_parallel[11--2-sequential] joblib/test/test_parallel.py::test_simple_parallel[11--2-threading] joblib/test/test_parallel.py::test_simple_parallel[11--2-backend5] joblib/test/test_parallel.py::test_simple_parallel[11--2-backend6] joblib/test/test_parallel.py::test_simple_parallel[11--2-backend7] joblib/test/test_parallel.py::test_simple_parallel[11--2-backend8] joblib/test/test_parallel.py::test_simple_parallel[11--2-backend9] joblib/test/test_parallel.py::test_simple_parallel[100-1-None] joblib/test/test_parallel.py::test_simple_parallel[100-1-loky] joblib/test/test_parallel.py::test_simple_parallel[100-1-multiprocessing] joblib/test/test_parallel.py::test_simple_parallel[100-1-sequential] joblib/test/test_parallel.py::test_simple_parallel[100-1-threading] joblib/test/test_parallel.py::test_simple_parallel[100-1-backend5] joblib/test/test_parallel.py::test_simple_parallel[100-1-backend6] joblib/test/test_parallel.py::test_simple_parallel[100-1-backend7] joblib/test/test_parallel.py::test_simple_parallel[100-1-backend8] joblib/test/test_parallel.py::test_simple_parallel[100-1-backend9] joblib/test/test_parallel.py::test_simple_parallel[100-2-None] joblib/test/test_parallel.py::test_simple_parallel[100-2-loky] joblib/test/test_parallel.py::test_simple_parallel[100-2-multiprocessing] joblib/test/test_parallel.py::test_simple_parallel[100-2-sequential] joblib/test/test_parallel.py::test_simple_parallel[100-2-threading] joblib/test/test_parallel.py::test_simple_parallel[100-2-backend5] joblib/test/test_parallel.py::test_simple_parallel[100-2-backend6] joblib/test/test_parallel.py::test_simple_parallel[100-2-backend7] joblib/test/test_parallel.py::test_simple_parallel[100-2-backend8] joblib/test/test_parallel.py::test_simple_parallel[100-2-backend9] joblib/test/test_parallel.py::test_simple_parallel[100--1-None] joblib/test/test_parallel.py::test_simple_parallel[100--1-loky] joblib/test/test_parallel.py::test_simple_parallel[100--1-multiprocessing] joblib/test/test_parallel.py::test_simple_parallel[100--1-sequential] joblib/test/test_parallel.py::test_simple_parallel[100--1-threading] joblib/test/test_parallel.py::test_simple_parallel[100--1-backend5] joblib/test/test_parallel.py::test_simple_parallel[100--1-backend6] joblib/test/test_parallel.py::test_simple_parallel[100--1-backend7] joblib/test/test_parallel.py::test_simple_parallel[100--1-backend8] joblib/test/test_parallel.py::test_simple_parallel[100--1-backend9] joblib/test/test_parallel.py::test_simple_parallel[100--2-None] joblib/test/test_parallel.py::test_simple_parallel[100--2-loky] joblib/test/test_parallel.py::test_simple_parallel[100--2-multiprocessing] joblib/test/test_parallel.py::test_simple_parallel[100--2-sequential] joblib/test/test_parallel.py::test_simple_parallel[100--2-threading] joblib/test/test_parallel.py::test_simple_parallel[100--2-backend5] joblib/test/test_parallel.py::test_simple_parallel[100--2-backend6] joblib/test/test_parallel.py::test_simple_parallel[100--2-backend7] joblib/test/test_parallel.py::test_simple_parallel[100--2-backend8] joblib/test/test_parallel.py::test_simple_parallel[100--2-backend9] joblib/test/test_parallel.py::test_main_thread_renamed_no_warning[None] joblib/test/test_parallel.py::test_main_thread_renamed_no_warning[loky] joblib/test/test_parallel.py::test_main_thread_renamed_no_warning[multiprocessing] joblib/test/test_parallel.py::test_main_thread_renamed_no_warning[sequential] joblib/test/test_parallel.py::test_main_thread_renamed_no_warning[threading] joblib/test/test_parallel.py::test_main_thread_renamed_no_warning[backend5] joblib/test/test_parallel.py::test_main_thread_renamed_no_warning[backend6] joblib/test/test_parallel.py::test_main_thread_renamed_no_warning[backend7] joblib/test/test_parallel.py::test_main_thread_renamed_no_warning[backend8] joblib/test/test_parallel.py::test_main_thread_renamed_no_warning[backend9] joblib/test/test_parallel.py::test_nested_parallel_warnings[loky-multiprocessing-True] joblib/test/test_parallel.py::test_nested_parallel_warnings[loky-loky-False] joblib/test/test_parallel.py::test_nested_parallel_warnings[multiprocessing-multiprocessing-True] joblib/test/test_parallel.py::test_nested_parallel_warnings[multiprocessing-loky-True] joblib/test/test_parallel.py::test_nested_parallel_warnings[threading-multiprocessing-True] joblib/test/test_parallel.py::test_nested_parallel_warnings[threading-loky-True] joblib/test/test_parallel.py::test_background_thread_parallelism[loky] joblib/test/test_parallel.py::test_background_thread_parallelism[multiprocessing] joblib/test/test_parallel.py::test_background_thread_parallelism[threading] joblib/test/test_parallel.py::test_nested_loop[multiprocessing-multiprocessing] joblib/test/test_parallel.py::test_nested_loop[multiprocessing-threading] joblib/test/test_parallel.py::test_nested_loop[multiprocessing-sequential] joblib/test/test_parallel.py::test_nested_loop[multiprocessing-loky] joblib/test/test_parallel.py::test_nested_loop[multiprocessing-back_compat_backend] joblib/test/test_parallel.py::test_nested_loop[threading-multiprocessing] joblib/test/test_parallel.py::test_nested_loop[threading-threading] joblib/test/test_parallel.py::test_nested_loop[threading-sequential] joblib/test/test_parallel.py::test_nested_loop[threading-loky] joblib/test/test_parallel.py::test_nested_loop[threading-back_compat_backend] joblib/test/test_parallel.py::test_nested_loop[sequential-multiprocessing] joblib/test/test_parallel.py::test_nested_loop[sequential-threading] joblib/test/test_parallel.py::test_nested_loop[sequential-sequential] joblib/test/test_parallel.py::test_nested_loop[sequential-loky] joblib/test/test_parallel.py::test_nested_loop[sequential-back_compat_backend] joblib/test/test_parallel.py::test_nested_loop[loky-multiprocessing] joblib/test/test_parallel.py::test_nested_loop[loky-threading] joblib/test/test_parallel.py::test_nested_loop[loky-sequential] joblib/test/test_parallel.py::test_nested_loop[loky-loky] joblib/test/test_parallel.py::test_nested_loop[loky-back_compat_backend] joblib/test/test_parallel.py::test_nested_loop[back_compat_backend-multiprocessing] joblib/test/test_parallel.py::test_nested_loop[back_compat_backend-threading] joblib/test/test_parallel.py::test_nested_loop[back_compat_backend-sequential] joblib/test/test_parallel.py::test_nested_loop[back_compat_backend-loky] joblib/test/test_parallel.py::test_nested_loop[back_compat_backend-back_compat_backend] joblib/test/test_parallel.py::test_nested_loop_with_exception_with_loky joblib/test/test_parallel.py::test_mutate_input_with_threads joblib/test/test_parallel.py::test_parallel_kwargs[1] joblib/test/test_parallel.py::test_parallel_kwargs[2] joblib/test/test_parallel.py::test_parallel_kwargs[3] joblib/test/test_parallel.py::test_parallel_as_context_manager[multiprocessing] joblib/test/test_parallel.py::test_parallel_as_context_manager[loky] joblib/test/test_parallel.py::test_parallel_as_context_manager[threading] joblib/test/test_parallel.py::test_parallel_pickling joblib/test/test_parallel.py::test_parallel_timeout_success[multiprocessing] joblib/test/test_parallel.py::test_parallel_timeout_success[loky] joblib/test/test_parallel.py::test_parallel_timeout_success[threading] joblib/test/test_parallel.py::test_parallel_timeout_fail[multiprocessing] joblib/test/test_parallel.py::test_parallel_timeout_fail[loky] joblib/test/test_parallel.py::test_parallel_timeout_fail[threading] joblib/test/test_parallel.py::test_error_capture[multiprocessing] joblib/test/test_parallel.py::test_error_capture[loky] joblib/test/test_parallel.py::test_dispatch_one_job[1-expected_queue0-multiprocessing] joblib/test/test_parallel.py::test_dispatch_one_job[1-expected_queue0-threading] joblib/test/test_parallel.py::test_dispatch_one_job[1-expected_queue0-sequential] joblib/test/test_parallel.py::test_dispatch_one_job[1-expected_queue0-loky] joblib/test/test_parallel.py::test_dispatch_one_job[1-expected_queue0-back_compat_backend] joblib/test/test_parallel.py::test_dispatch_one_job[4-expected_queue1-multiprocessing] joblib/test/test_parallel.py::test_dispatch_one_job[4-expected_queue1-threading] joblib/test/test_parallel.py::test_dispatch_one_job[4-expected_queue1-sequential] joblib/test/test_parallel.py::test_dispatch_one_job[4-expected_queue1-loky] joblib/test/test_parallel.py::test_dispatch_one_job[4-expected_queue1-back_compat_backend] joblib/test/test_parallel.py::test_dispatch_multiprocessing[multiprocessing] joblib/test/test_parallel.py::test_dispatch_multiprocessing[loky] joblib/test/test_parallel.py::test_dispatch_multiprocessing[threading] joblib/test/test_parallel.py::test_batching_auto_threading joblib/test/test_parallel.py::test_batching_auto_subprocesses[multiprocessing] joblib/test/test_parallel.py::test_batching_auto_subprocesses[loky] joblib/test/test_parallel.py::test_exception_dispatch joblib/test/test_parallel.py::test_nested_exception_dispatch[multiprocessing] joblib/test/test_parallel.py::test_nested_exception_dispatch[loky] joblib/test/test_parallel.py::test_nested_exception_dispatch[threading] joblib/test/test_parallel.py::test_multiple_spawning joblib/test/test_parallel.py::test_invalid_backend joblib/test/test_parallel.py::test_invalid_njobs[None] joblib/test/test_parallel.py::test_invalid_njobs[loky] joblib/test/test_parallel.py::test_invalid_njobs[multiprocessing] joblib/test/test_parallel.py::test_invalid_njobs[sequential] joblib/test/test_parallel.py::test_invalid_njobs[threading] joblib/test/test_parallel.py::test_invalid_njobs[backend5] joblib/test/test_parallel.py::test_invalid_njobs[backend6] joblib/test/test_parallel.py::test_invalid_njobs[backend7] joblib/test/test_parallel.py::test_invalid_njobs[backend8] joblib/test/test_parallel.py::test_invalid_njobs[backend9] joblib/test/test_parallel.py::test_register_parallel_backend joblib/test/test_parallel.py::test_overwrite_default_backend joblib/test/test_parallel.py::test_backend_context_manager[multiprocessing] joblib/test/test_parallel.py::test_backend_context_manager[loky] joblib/test/test_parallel.py::test_backend_context_manager[threading] joblib/test/test_parallel.py::test_backend_context_manager[test_backend_0] joblib/test/test_parallel.py::test_backend_context_manager[test_backend_1] joblib/test/test_parallel.py::test_backend_context_manager[test_backend_2] joblib/test/test_parallel.py::test_parameterized_backend_context_manager joblib/test/test_parallel.py::test_directly_parameterized_backend_context_manager joblib/test/test_parallel.py::test_nested_backend_context_manager[threading] joblib/test/test_parallel.py::test_nested_backend_context_manager[loky] joblib/test/test_parallel.py::test_nested_backend_context_manager[multiprocessing] joblib/test/test_parallel.py::test_nested_backend_context_manager[back_compat_backend] joblib/test/test_parallel.py::test_nested_backend_in_sequential[multiprocessing-2] joblib/test/test_parallel.py::test_nested_backend_in_sequential[multiprocessing--1] joblib/test/test_parallel.py::test_nested_backend_in_sequential[multiprocessing-None] joblib/test/test_parallel.py::test_nested_backend_in_sequential[loky-2] joblib/test/test_parallel.py::test_nested_backend_in_sequential[loky--1] joblib/test/test_parallel.py::test_nested_backend_in_sequential[loky-None] joblib/test/test_parallel.py::test_nested_backend_in_sequential[threading-2] joblib/test/test_parallel.py::test_nested_backend_in_sequential[threading--1] joblib/test/test_parallel.py::test_nested_backend_in_sequential[threading-None] joblib/test/test_parallel.py::test_backend_nesting_level[multiprocessing-multiprocessing] joblib/test/test_parallel.py::test_backend_nesting_level[multiprocessing-loky] joblib/test/test_parallel.py::test_backend_nesting_level[multiprocessing-threading] joblib/test/test_parallel.py::test_backend_nesting_level[loky-multiprocessing] joblib/test/test_parallel.py::test_backend_nesting_level[loky-loky] joblib/test/test_parallel.py::test_backend_nesting_level[loky-threading] joblib/test/test_parallel.py::test_backend_nesting_level[threading-multiprocessing] joblib/test/test_parallel.py::test_backend_nesting_level[threading-loky] joblib/test/test_parallel.py::test_backend_nesting_level[threading-threading] joblib/test/test_parallel.py::test_retrieval_context joblib/test/test_parallel.py::test_joblib_exception joblib/test/test_parallel.py::test_safe_function joblib/test/test_parallel.py::test_invalid_batch_size[0] joblib/test/test_parallel.py::test_invalid_batch_size[-1] joblib/test/test_parallel.py::test_invalid_batch_size[1.42] joblib/test/test_parallel.py::test_dispatch_race_condition[2-2-all-auto] joblib/test/test_parallel.py::test_dispatch_race_condition[2-2-n_jobs-auto] joblib/test/test_parallel.py::test_dispatch_race_condition[10-2-n_jobs-auto0] joblib/test/test_parallel.py::test_dispatch_race_condition[517-2-n_jobs-auto] joblib/test/test_parallel.py::test_dispatch_race_condition[10-2-n_jobs-auto1] joblib/test/test_parallel.py::test_dispatch_race_condition[10-4-n_jobs-auto] joblib/test/test_parallel.py::test_dispatch_race_condition[200-12-n_jobs-auto] joblib/test/test_parallel.py::test_dispatch_race_condition[25-12-2 joblib/test/test_parallel.py::test_dispatch_race_condition[250-12-all-1] joblib/test/test_parallel.py::test_dispatch_race_condition[250-12-2 joblib/test/test_parallel.py::test_dispatch_race_condition[200-12-2 joblib/test/test_parallel.py::test_default_mp_context joblib/test/test_parallel.py::test_parallel_with_interactively_defined_functions[multiprocessing] joblib/test/test_parallel.py::test_parallel_with_interactively_defined_functions[loky] joblib/test/test_parallel.py::test_parallel_with_unpicklable_functions_in_args[delayed-def joblib/test/test_parallel.py::test_parallel_with_unpicklable_functions_in_args[delayed-square joblib/test/test_parallel.py::test_parallel_with_unpicklable_functions_in_args[args-def joblib/test/test_parallel.py::test_parallel_with_unpicklable_functions_in_args[args-square joblib/test/test_parallel.py::test_parallel_with_unpicklable_functions_in_args[kwargs-def joblib/test/test_parallel.py::test_parallel_with_unpicklable_functions_in_args[kwargs-square joblib/test/test_parallel.py::test_parallel_with_interactively_defined_functions_default_backend joblib/test/test_parallel.py::test_parallel_with_interactively_defined_bound_method joblib/test/test_parallel.py::test_parallel_with_exhausted_iterator joblib/test/test_parallel.py::test_warning_about_timeout_not_supported_by_backend joblib/test/test_parallel.py::test_abort_backend[1-None] joblib/test/test_parallel.py::test_abort_backend[1-loky] joblib/test/test_parallel.py::test_abort_backend[1-multiprocessing] joblib/test/test_parallel.py::test_abort_backend[1-sequential] joblib/test/test_parallel.py::test_abort_backend[1-threading] joblib/test/test_parallel.py::test_abort_backend[1-backend5] joblib/test/test_parallel.py::test_abort_backend[1-backend6] joblib/test/test_parallel.py::test_abort_backend[1-backend7] joblib/test/test_parallel.py::test_abort_backend[1-backend8] joblib/test/test_parallel.py::test_abort_backend[1-backend9] joblib/test/test_parallel.py::test_abort_backend[2-None] joblib/test/test_parallel.py::test_abort_backend[2-loky] joblib/test/test_parallel.py::test_abort_backend[2-multiprocessing] joblib/test/test_parallel.py::test_abort_backend[2-sequential] joblib/test/test_parallel.py::test_abort_backend[2-threading] joblib/test/test_parallel.py::test_abort_backend[2-backend5] joblib/test/test_parallel.py::test_abort_backend[2-backend6] joblib/test/test_parallel.py::test_abort_backend[2-backend7] joblib/test/test_parallel.py::test_abort_backend[2-backend8] joblib/test/test_parallel.py::test_abort_backend[2-backend9] joblib/test/test_parallel.py::test_abort_backend[-2-None] joblib/test/test_parallel.py::test_abort_backend[-2-loky] joblib/test/test_parallel.py::test_abort_backend[-2-multiprocessing] joblib/test/test_parallel.py::test_abort_backend[-2-sequential] joblib/test/test_parallel.py::test_abort_backend[-2-threading] joblib/test/test_parallel.py::test_abort_backend[-2-backend5] joblib/test/test_parallel.py::test_abort_backend[-2-backend6] joblib/test/test_parallel.py::test_abort_backend[-2-backend7] joblib/test/test_parallel.py::test_abort_backend[-2-backend8] joblib/test/test_parallel.py::test_abort_backend[-2-backend9] joblib/test/test_parallel.py::test_abort_backend[-1-None] joblib/test/test_parallel.py::test_abort_backend[-1-loky] joblib/test/test_parallel.py::test_abort_backend[-1-multiprocessing] joblib/test/test_parallel.py::test_abort_backend[-1-sequential] joblib/test/test_parallel.py::test_abort_backend[-1-threading] joblib/test/test_parallel.py::test_abort_backend[-1-backend5] joblib/test/test_parallel.py::test_abort_backend[-1-backend6] joblib/test/test_parallel.py::test_abort_backend[-1-backend7] joblib/test/test_parallel.py::test_abort_backend[-1-backend8] joblib/test/test_parallel.py::test_abort_backend[-1-backend9] joblib/test/test_parallel.py::test_lambda_expression[None] joblib/test/test_parallel.py::test_lambda_expression[loky] joblib/test/test_parallel.py::test_lambda_expression[threading] joblib/test/test_parallel.py::test_delayed_check_pickle_deprecated joblib/test/test_parallel.py::test_backend_batch_statistics_reset[multiprocessing] joblib/test/test_parallel.py::test_backend_batch_statistics_reset[loky] joblib/test/test_parallel.py::test_backend_hinting_and_constraints joblib/test/test_parallel.py::test_backend_hinting_and_constraints_with_custom_backends joblib/test/test_parallel.py::test_invalid_backend_hinting_and_constraints joblib/test/test_parallel.py::test_global_parallel_backend joblib/test/test_parallel.py::test_external_backends joblib/test/test_parallel.py::test_nested_parallelism_limit[loky] joblib/test/test_parallel.py::test_nested_parallelism_limit[threading] joblib/test/test_parallel.py::test_thread_bomb_mitigation[loky] joblib/test/test_parallel.py::test_thread_bomb_mitigation[threading] joblib/test/test_parallel.py::test_dask_backend_when_dask_not_installed joblib/test/test_parallel.py::test_zero_worker_backend joblib/test/test_parallel.py::test_globals_update_at_each_parallel_call joblib/test/test_parallel.py::test_threadpool_limitation_in_child_override[OPENBLAS_NUM_THREADS-2] joblib/test/test_parallel.py::test_threadpool_limitation_in_child_override[OPENBLAS_NUM_THREADS--1] joblib/test/test_parallel.py::test_threadpool_limitation_in_child_override[MKL_NUM_THREADS-2] joblib/test/test_parallel.py::test_threadpool_limitation_in_child_override[MKL_NUM_THREADS--1] joblib/test/test_parallel.py::test_threadpool_limitation_in_child_override[OMP_NUM_THREADS-2] joblib/test/test_parallel.py::test_threadpool_limitation_in_child_override[OMP_NUM_THREADS--1] joblib/test/test_parallel.py::test_loky_reuse_workers[2] joblib/test/test_parallel.py::test_loky_reuse_workers[4] joblib/test/test_parallel.py::test_loky_reuse_workers[-1]
joblib/parallel.py continuous_integration/travis/install.sh CHANGES.rst
joblib/parallel.py continuous_integration/travis/install.sh CHANGES.rst