You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by "dstandish (via GitHub)" <gi...@apache.org> on 2023/08/02 21:23:35 UTC

[GitHub] [airflow] dstandish commented on pull request #31987: Load just the first yielded event in the triggerer

dstandish commented on PR #31987:
URL: https://github.com/apache/airflow/pull/31987#issuecomment-1662982115

   If we really want to allow user to do stuff post-yield, and still accept only one event, it's possible to do:
   ```python
   async def do_loop_with_stuff_after_yield():
       inner_loops = 0
       while True:
           inner_loops += 1
           print(f"{inner_loops}: before ")
           yield "hi"
           print(f"{inner_loops}: after")
           return
   
   async def main():
       outer_loops = 0
       async for event in do_loop_with_stuff_after_yield():
           outer_loops += 1
           if outer_loops > 1:
               raise RuntimeError("Yielding more than one event is not supported.")
           print(outer_loops, ',', event)
   
   asyncio.run(main())
   ```
   
   But were we to do this, I think it would still be possible (though perhaps not super likely) that the trigger in question is canceled before it comes around to resume the iteration and thus the code between `yield` and `return` would not have been run.  As such, it does not seem like something anyone should ever do.
   
   Though if we really desired this, we could actually guarantee that the code between `yield` and `return` is always run. And the way to do this would be to delay adding the event to the `events` deque until after the generator exits.  But then the event emission would be delayed until the trigger returns, which begs the question, why not just delay yielding the event in the first place.
   
   So, there doesn't seem to be much value in running code post yield.  At the same time, it is a little weird to just not fully consume the generator that the user wrote, and moreover to do so silently.  Curious if @uranusjr might have a thought.
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org