Skip to content

Use asyncio with sync wrapper, stay compatible - #98

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

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

Conversation

@Koseng

Copy link
Copy Markdown
Contributor

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.

@KosengKoseng mentioned this pull request Jun 3, 2021
@Koseng

Copy link
Copy Markdown
ContributorAuthor

Example async client test code:

importasynciofromSimConnectimportAircraftRequests, SimConnectasyncdefmain():
sm=SimConnect()
aq=AircraftRequests(sm)
whileTrue:
results=awaitasyncio.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)
awaitasyncio.sleep(0.3)
asyncio.run(main())

Sign up for freeto 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

@Koseng