One of my plans for a future version of PyObjC is to add pervasive support for asyncio. This will in the end result in two changes to PyObjC:
-
Add an implementation of an asyncio event loop that is implemented on top of Apple’s NSRunLoop and CFRunLoop
-
Add “async” methods to Cocoa classes too change callback style programming with completion handlers into more or less standard async Python code.
To experiment with the latter I’ve created a small and crude script that lets me call the geocoder from CoreLocation in an async manner:
async def main(adress):
coder = CoreLocation.CLGeocoder.alloc().init()
placemarks, error = await coder.geocodeAdressString_(address)
print(f"placemarks: {placemarks}")
print(f"error: {error}")
This looks a lot nicer than the usual callback based code.
A link to the full script:. Most of the linked to script is support code that should mostly go away when I get around to adding an asyncio event loop to PyObjC.