On Tue, Jul 11, 2017 at 3:26 PM, Laurent Mazuel via Async-sig <async-sig@python.org> wrote:
But I got a warning if I decide to do not use this poller, RuntimeWarning: coroutine 'foo' was never awaited ... I found 2 solutions to avoid the warning, and I currently prefer solution 2: 1- Return a function to call, and not a coroutine. The "await" statement becomes:
obj = await optional_poller()
2- Return my initial object with an async method. This allows me to write (something finally close to the current code):
async_poller = client.create(**parameters) obj = async_poller.resource() # Get the initial resource information, but the object is not actually created yet. obj = await async_poller.result() # OPTIONAL
Either of those options sounds fine to me. Instead of creating your coroutine object at the very beginning, create your coroutine *function*. Wait until you know you're going to do your second operation, and create your coroutine object then! --Chris
My async_poller object being something like:
class PollerOperation: async def result(self): ...async version of previous sync result()...
So the questions are: - Does this seem a correct pattern? - Is there a simple way to achieve something like this:
obj = await async_poller
meaning, I can win the "result()" syntax and directly "await" on the object and get the result from magic function. I tried by subclassing some ABC coroutine/awaitable, but wasn't able to find a correct syntax. I'm not even sure this makes sense and respects the zen of Python 😊
If it helps, I'm willing to use 3.5 as minimal requirement to get async behavior.
Thank you!!
Laurent _______________________________________________ Async-sig mailing list Async-sig@python.org https://mail.python.org/mailman/listinfo/async-sig Code of Conduct: https://www.python.org/psf/codeofconduct/