{"id":291,"library":"aiosignal","title":"aiosignal","description":"aiosignal is a Python library designed to manage asynchronous callbacks in asyncio projects. The current version is 1.4.0, released on July 3, 2025. The library has a moderate release cadence, with updates typically occurring annually.","status":"active","version":"1.4.0","language":"python","source_language":"en","source_url":"https://github.com/aio-libs/aiosignal","tags":["asyncio","callbacks","signals","python"],"install":[{"cmd":"pip install aiosignal","lang":"bash","label":"Install aiosignal"}],"dependencies":[{"reason":"Required for managing immutable lists","package":"frozenlist","optional":false},{"reason":"Needed for enhanced type hinting in Python versions below 3.13","package":"typing-extensions","optional":true}],"imports":[{"note":"The correct import is directly from the aiosignal package; importing from submodules is incorrect.","wrong":"from aiosignal.signal import Signal","symbol":"Signal","correct":"from aiosignal import Signal"}],"quickstart":{"code":"import asyncio\nfrom aiosignal import Signal\n\nasync def callback(data):\n    print(f'Received data: {data}')\n\nasync def main():\n    signal = Signal(owner=None)\n    signal.append(callback)\n    signal.freeze()\n    await signal.send('Hello, World!')\n\nasyncio.run(main())","lang":"python","description":"This example demonstrates creating a Signal, registering a callback, freezing the signal, and sending data to the callback."},"warnings":[{"fix":"Upgrade your Python environment to version 3.9 or newer.","message":"Dropped support for Python 3.7 and 3.8.","severity":"breaking","affected_versions":"1.3.2 and later"},{"fix":"Ensure all necessary callbacks are added before calling freeze().","message":"Once a Signal is frozen, adding or removing callbacks is forbidden.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Define callbacks using async def.","message":"Callbacks must be asynchronous functions.","severity":"gotcha","affected_versions":"All versions"}],"env_vars":null,"last_verified":"2026-05-12T12:52:47.971Z","next_check":"2026-06-26T00:00:00.000Z","problems":[{"fix":"pip install aiosignal","cause":"The 'aiosignal' package is not installed in the Python environment.","error":"ModuleNotFoundError: No module named 'aiosignal'"},{"fix":"from aiosignal import Signal","cause":"The 'Signal' class is not found in the 'aiosignal' module, possibly due to an incorrect import statement or version mismatch.","error":"ImportError: cannot import name 'Signal' from 'aiosignal'"},{"fix":"Use 'await signal.send(data)' to trigger callbacks.","cause":"Attempting to call a 'Signal' object as a function, which is not supported.","error":"TypeError: 'Signal' object is not callable"},{"fix":"Use 'signal.connect(callback)' to add callbacks.","cause":"Trying to use list methods like 'append' on a 'Signal' object, which does not support them.","error":"AttributeError: 'Signal' object has no attribute 'append'"},{"fix":"Ensure modifications are made before calling 'signal.freeze()'.","cause":"Attempting to modify a 'Signal' object after it has been frozen.","error":"RuntimeError: Cannot modify frozen signal"}],"ecosystem":"pypi","meta_description":null,"install_score":100,"install_tag":"verified","quickstart_score":80,"quickstart_tag":"verified","pypi_latest":null,"install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":1.9,"disk_size":"18.7M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":1.9,"disk_size":"19M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.07,"mem_mb":2.1,"disk_size":"20.6M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.05,"mem_mb":2.1,"disk_size":"21M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.05,"mem_mb":1.9,"disk_size":"12.5M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.06,"mem_mb":1.9,"disk_size":"13M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.01,"mem_mb":0.8,"disk_size":"11.8M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.01,"mem_mb":0.6,"disk_size":"12M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":1.9,"disk_size":"18.2M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":1.9,"disk_size":"19M"}]},"quickstart_checks":{"last_tested":"2026-04-23","tag":"verified","tag_description":"quickstart runs on critical runtimes, recently tested","results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]}}