[Distutils] in search of graceful co-routines

Chris Withers chris at simplistix.co.uk
Tue May 17 19:04:40 CEST 2011


Apologies, wrong list...

Chris

On 17/05/2011 17:53, Chris Withers wrote:
> Hi All,
>
> I'm looking for a graceful pattern for the situation where I have a
> provider of a sequence, the consumer of a sequence and code to moderate
> the two, and where I'd like to consumer to be able to signal to the
> provider that it hasn't succeeded in processing one element in the queue.
>
> So, I'd want the controlling code to look a lot like:
>
> for item in provider:
> try:
> consumer.handleItem(self)
> except:
> provider.failed(item)
>
> Now, since the sequence is long, and comes from a file, I wanted the
> provider to be an iterator, so it occurred to me I could try and use the
> new 2-way generator communication to solve the "communicate back with
> the provider", with something like:
>
> for item in provider:
> try:
> consumer.handleItem(self)
> except:
> provider.send('fail')
> else:
> provider.send('succeed')
>
> ..but of course, this won't work, as 'send' causes the provider
> iteration to continue and then returns a value itself. That feels weird
> and wrong to me, but I guess my use case might not be what was intended
> for the send method.
>
> Anyway, I wonder how other people would write this?
> (I'm particularly interested in a sane way to use the two way
> communication that PEP 342 introduced)
>
> cheers,
>
> Chris
>

-- 
Simplistix - Content Management, Batch Processing & Python Consulting
            - http://www.simplistix.co.uk


More information about the Distutils-SIG mailing list