[Python-Dev] PEP 334 - Simple Coroutines via SuspendIteration

Clark C. Evans cce at clarkevans.com
Wed Sep 8 21:58:53 CEST 2004


On Wed, Sep 08, 2004 at 09:33:10PM +0200, Samuele Pedroni wrote:
| Clark C. Evans wrote:
| >I was assuming that only calls within the generator to next(), implicit
| >or otherwise, would be suspension points.
| 
| I missed that.

*nod*  I will fix the PEP.

| >This covers all of my use cases anyway.  In the other situations, if
| >they are even useful, don't do that.  Convert the SuspendIteration to a
| >RuntimeError, or resume at the previous suspension point?
| >
| >The idea of the PEP was that a nested-generator context provides this
| >limited set of suspension points to make an implementation possible.
| 
| then the PEP needs clarification because I had the impression that
| 
| def g(src):
|    data = src.read()
|    yield data
|    data = src.read()
|    yield data

The data producers would all be iterators, ones that that could 
possibly raise SuspendIteration() from within their next() method.

| the read itself could throw a SuspendIteration

If read() did raise a SuspendIteration() exception, then it would
make sense to terminate the generator, perhaps with a RuntimeError.
I just hadn't considered this case.  If someone has a clever 
solution that makes this case work, great, but its not something
that I was contemplating.

| and upon the sucessive 
| next the src.read() itself would be retried.
| But if it's only nexts than 
| can be suspension points then the generator would be not resumable in 
| this case. 

Right.

I was musing (but it's not in the PEP) that, iter() would sprout an
option that let the producer know if it can suspend.  If a generator
that was itself called with this suspend flag asked for a child
generator, then the suspend flag would be carried.  But this
is a separate issue.

Thanks for thinking about this PEP.

Clark


-- 
Clark C. Evans                      Prometheus Research, LLC.
                                    http://www.prometheusresearch.com/
    o                               office: +1.203.777.2550 
  ~/ ,                              mobile: +1.203.444.0557 
 //
((   Prometheus Research: Transforming Data Into Knowledge
 \\  ,
   \/    - Research Exchange Database
   /\    - Survey & Assessment Technologies
   ` \   - Software Tools for Researchers
    ~ *


More information about the Python-Dev mailing list