So -

Now thinking on the problem as a whole -
I think maybe a good way to address this is to put the logic on
"counting N interations or X time and allowing switch"  - the logic you
had to explicitly mingle in your code in the first example, in
a function that could wrap the iterator of the `for` loop.

However, that idea would need a _synchronous_  call to the loop
to force an async context switch - I don't know if
there is such a call (even an internal one). Actually
I don't know it that is possible - but I can't think of other way of
factoring it out without explicitly triggering an await.

The switcher  would then be used just as we use `enumerate` -
think of something along:


for context_switch, data_set in async_switcher(data_sets, timeout=100):
    for record in context_switch(data_set):
         # the call to __iter__ here would include the logic to decide
whether to switch,
          ...

And for a single (non-nested) loop, either a separate call or:

for  data_set in next(async_switcher(data_sets, timeout=100))[0]:
   ...

All in all: if there is a valid way to force the async-context switch in an
sync-call to this wrapper object, it is possible to create a small package
that would have this feature and be easy to use.
(And then, we discuss further down if this is stdlib worthy)





On Fri, 14 Jun 2019 at 09:45, Nikita Melentev <multisosnoo...@gmail.com>
wrote:

> The problem here is that even if I have a coroutine all code between
> «awaits» is blocking.
>
> ``` python
> async def foo():
>     data = await connection.get()  # it is ok, loop handling request, we
> waiting
>     # from here
>     for item in data:  # this is 10 ** 6 len
>         do_sync_jon(item)  # this took 1ms
>     # to here we are blocking loop for 1 second
>     await something_next()
> ```
> _______________________________________________
> Python-ideas mailing list -- python-ideas@python.org
> To unsubscribe send an email to python-ideas-le...@python.org
> https://mail.python.org/mailman3/lists/python-ideas.python.org/
> Message archived at
> https://mail.python.org/archives/list/python-ideas@python.org/message/BLLU545Y2FLACLMHC6OVXGJ5YUF66E4K/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/ZKADHNTVHKLUVTW3PPC2RZF5PUXGBFUE/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to