sending thread exceptions (was Re: RELEASED Python 2.3.1)
Alex Martelli
aleax at aleax.it
Sat Sep 27 12:04:15 EDT 2003
Dominic wrote:
>
> Well, first of all I agree with you that
> a more traditional approach using queues
> is better and more predictable.
>
> And yes on a single CPU machine I was
> thinking about stopping all "low priority"
> threads.
>
> This is somehow creaky and fragile but
> you don't need a thread per "task" as
> in your queue based alternative.
Queues don't make you need a thread per task: you
can perfectly well have threads from a pool peeling
tasks of a queue of tasks -- that's a frequent use,
in fact.
> So you could have 3000 "tasks" and
> one thread e.g.
> However every "task" would need to recover
> from it's injected exception which
> is kind of unpredictable and hard to program.
>
> I would not use such an architecture ;-)
Me neither -- exceptions can arrive at any time, and
recovering and restarting a task under such conditions
is frighteningly hard. Much easier to have all tasks
coded as loops with reasonably frequent checks on e.g.
a lock, if you do need to temporarily suspend them all
to leave CPU available for an occasional high-priority
task -- this way the checks come when the task is in
a "reasonable", "restartable" state, implicitly.
> Now to the delay:
...
> As you can see it takes about 7 seconds until the
> exception is injected.
Offhand you seem to be testing your console drivers and the
C runtime library interface to them, much more than you're
testing Python. The test I posted doesn't use the console
in such critical junctures -- admittedly it does use time.sleep,
one does have to waste time in SOME way without melting the
CPU, but that still feels less artificial to me than your
console-based minuet.
Alex
More information about the Python-list
mailing list