[Python-Dev] PEP 334 - Simple Coroutines via SuspendIteration (original) (raw)

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