{"id":6413,"library":"pqdm","title":"PQDM - Parallel TQDM","description":"PQDM is a TQDM and concurrent futures wrapper designed to provide enjoyable parallelization of iterating through an Iterable with a progress bar. It supports both process-based and thread-based parallel execution and automatically integrates with `tqdm.notebook` in Jupyter environments. The current version is 0.2.0, with the last PyPI release in February 2022, suggesting a mature or slower development cadence.","status":"active","version":"0.2.0","language":"en","source_language":"en","source_url":"https://github.com/niedakh/pqdm","tags":["parallel-processing","tqdm","progress-bar","concurrent-futures","multiprocessing","multithreading"],"install":[{"cmd":"pip install pqdm","lang":"bash","label":"Install stable release"}],"dependencies":[{"reason":"Core dependency for progress bar functionality.","package":"tqdm"},{"reason":"Provides bounded executor variants for process and thread pools.","package":"bounded-pool-executor"},{"reason":"Used for compatibility with newer typing features in older Python versions.","package":"typing-extensions"}],"imports":[{"note":"Users must explicitly import from `pqdm.processes` for multiprocessing or `pqdm.threads` for multithreading, depending on their use case. The top-level `pqdm` module does not directly expose the callable.","wrong":"from pqdm import pqdm","symbol":"pqdm","correct":"from pqdm.processes import pqdm"}],"quickstart":{"code":"from pqdm.processes import pqdm\nimport time\n\ndef long_running_task(number):\n    time.sleep(0.1) # Simulate work\n    return number * number\n\nitems = list(range(1, 101))\n\n# Parallelize the task with 4 processes and a progress bar\nresults = pqdm(items, long_running_task, n_jobs=4, desc=\"Processing numbers\")\n\nprint(f\"First 5 results: {results[:5]}\")","lang":"python","description":"This example demonstrates how to use `pqdm` to parallelize a simple CPU-bound task using 4 processes, displaying a TQDM progress bar. For I/O-bound tasks, `from pqdm.threads import pqdm` would be more appropriate."},"warnings":[{"fix":"Always explicitly import `pqdm` from either `pqdm.processes` or `pqdm.threads` based on the nature of your workload.","message":"Choosing the correct backend (processes vs. threads) is crucial for optimal performance. Use `from pqdm.processes import pqdm` for CPU-bound tasks and `from pqdm.threads import pqdm` for I/O-bound tasks. Incorrect selection can lead to suboptimal performance, e.g., using threads for CPU-bound tasks in Python due to the GIL.","severity":"gotcha","affected_versions":"0.1.0 - 0.2.0"},{"fix":"Review the 'Different ways to pass arguments to function' section in the documentation and set `argument_type='args'` or `argument_type='kwargs'` as needed.","message":"When passing arguments to the target function, `pqdm` defaults to passing iterable elements directly. For functions expecting multiple positional arguments or keyword arguments, you must specify the `argument_type` parameter (e.g., `'args'` for `func(a, b)` with iterable `[[a1, b1], [a2, b2]]` or `'kwargs'` for `func(a=x, b=y)` with iterable `[{'a': x1, 'b': y1}, {'a': x2, 'b': y2}]`).","severity":"gotcha","affected_versions":"0.1.0 - 0.2.0"},{"fix":"Be aware of the project's update cadence. For critical bug fixes or new features, monitor the GitHub repository's commit history and issues page.","message":"The latest PyPI release (v0.2.0) for `pqdm` was in February 2022. While the library is functional, this suggests a slower or potentially maintenance-focused development cycle. Users seeking actively developed or frequently updated features might want to check the GitHub repository directly for the latest commits or consider alternative libraries if frequent updates are a requirement.","severity":"gotcha","affected_versions":"All versions"}],"env_vars":null,"last_verified":"2026-04-15T00:00:00.000Z","next_check":"2026-07-14T00:00:00.000Z"}