> I'm not sure that I'd agree with the simpler API part though :-)

I was referring to your old API. Still, we are both obviously very
biased here :-p

> Does ThreadPool using some
> sort of balancing strategy if poolsize where set to < len(URLs)?

Yes, of course! Otherwise it wouldn't really qualify as a pool.

> "retrieve" seems to take multiple url arguments.

Correct. `retrieve` is simply a generator that retrieve URLs
sequentially, the ThreadPool distributes the input stream so that each
workers get an iterator over its work load.

>> If delicate job control is necessary, an Executor can be used. It is
>> implemented on top of the pool, and offers submit(*items) which
>> returns job ids to be used for cancel() and status().  Jobs can be
>> submitted and canceled concurrently.
>
> What type is each "item" supposed to be?

Whatever your iterator-processing function is supposed to process.
The URLs example can be written using an Executor as:

 e = Executor(ThreadPool, retrieve)
 e.submit(*URLs)
 e.close()
 print list(e.result)


> Can I wait on several items?

Do you mean wait for several particular input values to be completed?
As of this moment, yes but rather inefficiently. I have not considered
it is a useful feature, especially when taking a wholesale,
list-processing view: that a worker pool process its input stream
_out_of_order_.  If you just want to wait for several particular
items, it means you need their outputs _in_order_, so why do you want
to use a worker pool in the first place?

However, I'd be happy to implement something like
Executor.submit(*items, wait=True).

Cheers,
aht
_______________________________________________
stdlib-sig mailing list
stdlib-sig@python.org
http://mail.python.org/mailman/listinfo/stdlib-sig

Reply via email to