Skip to content

Use asyncio with sync wrapper, stay compatible#98

Open
Koseng wants to merge 1 commit intoodwdinc:masterfrom
Koseng:asyncio-wrapper
Open

Use asyncio with sync wrapper, stay compatible#98
Koseng wants to merge 1 commit intoodwdinc:masterfrom
Koseng:asyncio-wrapper

Conversation

@Koseng
Copy link
Contributor

@Koseng Koseng commented Jun 3, 2021

Moved to asyncio, including a sync wrapper. So everything should be compatible. Introduced async_get(...) next to get(...).

To call async functions, an event loop is necessary. This is provided by the helper thread in AsyncLoop. With that helper, a sync wrapper can be put on top of the async implementation.

Please test.

I also tried tried an implementation with asyncio Futures to replace the wait and sleep pattern. It is the asyncio way to wait for a callback. But it turned out to be much slower in the sync case, so I returned to the current implementation.

@Koseng Koseng mentioned this pull request Jun 3, 2021
@Koseng
Copy link
Contributor Author

Koseng commented Jun 4, 2021

Example async client test code:

import asyncio
from SimConnect import AircraftRequests, SimConnect

async def main():
        sm = SimConnect()
        aq = AircraftRequests(sm)
        while True:
            results = await asyncio.gather(
                        aq.async_get("RUDDER_DEFLECTION"),
                        aq.async_get("AMBIENT_PRESSURE"),
                        aq.async_get('RADIO_HEIGHT'),
                        aq.async_get("GROUND_ALTITUDE"),
                        aq.async_get("RUDDER_DEFLECTION"),
                        aq.async_get("AMBIENT_PRESSURE"),
                        aq.async_get('RADIO_HEIGHT'),
                        aq.PositionandSpeedData.async_get('PLANE_LATITUDE'),
                        aq.PositionandSpeedData.async_get('PLANE_LONGITUDE'),
                        aq.PositionandSpeedData.async_get('PLANE_ALTITUDE'),
                        aq.FlightInstrumentationData.async_get('KOHLSMAN_SETTING_HG'))
            print(results)
            await asyncio.sleep(0.3)

asyncio.run(main())

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant