{"library":"pebble","title":"Pebble","description":"Pebble is a Python library that enhances `concurrent.futures` with features like timeouts, remote process tracebacks, and cleaner pool management, making threading and multiprocessing more robust and user-friendly. It is currently at version 5.2.0 and maintains an active release cadence with frequent minor updates.","language":"python","status":"active","last_verified":"Fri May 15","install":{"commands":["pip install pebble"],"cli":null},"imports":["from pebble import ProcessPool","from pebble import ThreadPool"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"from pebble import ProcessPool\nfrom concurrent.futures import TimeoutError\nimport os\nimport time\n\ndef my_task(data, delay):\n    # Simulate some work\n    time.sleep(delay)\n    return f\"Processed {data} after {delay}s on PID {os.getpid()}\"\n\nif __name__ == \"__main__\": # Essential for ProcessPool on Windows/macOS\n    print(\"--- Pebble ProcessPool Quickstart ---\")\n    with ProcessPool(max_workers=2) as pool:\n        print(\"Submitting tasks...\")\n        # schedule returns a future object, allowing timeout directly on the task\n        future1 = pool.schedule(my_task, args=(\"task A\", 1), timeout=2)\n        future2 = pool.schedule(my_task, args=(\"task B\", 3), timeout=2) # This task will intentionally timeout\n\n        print(\"\\nGetting results for task 1 (should succeed):\")\n        try:\n            result1 = future1.result() # blocks until result is ready or timeout/exception\n            print(f\"Result 1: {result1}\")\n        except TimeoutError:\n            print(\"Task 1 timed out!\")\n        except Exception as e:\n            print(f\"Task 1 raised an unexpected exception: {e}\")\n            # For remote exceptions, e.traceback can provide the remote stack trace\n\n        print(\"\\nGetting results for task 2 (should timeout):\")\n        try:\n            result2 = future2.result()\n            print(f\"Result 2: {result2}\")\n        except TimeoutError:\n            print(\"Task 2 timed out as expected!\")\n        except Exception as e:\n            print(f\"Task 2 raised an unexpected exception: {e}\")\n            # For remote exceptions, e.traceback can provide the remote stack trace\n\n    print(\"\\nAll tasks completed or processed in pool.\")","lang":"python","description":"This quickstart demonstrates how to use Pebble's `ProcessPool` to execute functions in separate processes with built-in timeouts. It covers scheduling tasks, retrieving results, and handling `TimeoutError` as well as other exceptions. The `if __name__ == '__main__':` block is crucial for `ProcessPool` on Windows and macOS.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-15","installed_version":"5.2.0","pypi_latest":"5.2.0","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":1.5,"avg_import_s":0.33,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pebble","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.2,"mem_mb":6.6,"disk_size":"18.1M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pebble","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0.14,"mem_mb":6.6,"disk_size":"19M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pebble","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.28,"mem_mb":7.7,"disk_size":"19.9M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pebble","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.25,"mem_mb":7.7,"disk_size":"20M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pebble","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.52,"mem_mb":8.2,"disk_size":"11.8M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pebble","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.4,"import_time_s":0.51,"mem_mb":8.2,"disk_size":"12M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pebble","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.55,"mem_mb":8.7,"disk_size":"11.5M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pebble","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0.5,"mem_mb":8.7,"disk_size":"12M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pebble","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.19,"mem_mb":6.4,"disk_size":"17.6M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pebble","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.7,"import_time_s":0.16,"mem_mb":6.4,"disk_size":"18M"}]}}