Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use asyncio with sync wrapper, stay compatible #98

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

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