[Python-ideas] @run_as_thread decorator
jnoller at gmail.com
Sun Mar 6 04:25:28 CET 2011
On Sat, Mar 5, 2011 at 7:55 PM, Nick Coghlan <ncoghlan at gmail.com> wrote:
> On Sun, Mar 6, 2011 at 3:16 AM, Jesse Noller <jnoller at gmail.com> wrote:
>> I've long wanted to put something into the stdlib like this, but as
>> others in the thread have pointed out - there's some semantics that
>> remain to be hashed out and the behavior is dangerous (imo), and
>> magical to have in the stdlib right now.
>> In this case, I would recommend building out a library that contains
>> these decorators (both threads and processes) building from the
>> futures (concurrent.futures.Executor ABC) library as possible, and
>> let's see how it pans out. I've struggled with really liking/wanting
>> this and the fact that it's dangerous, and surprising.
> Well said, especially the last line :)
> However, I suspect this is one of those things where:
> - rewriting it yourself is easier than finding a library for it, so a
> PyPI module would gather little interest or feedback
> - doing it "right" in the stdlib would eliminate the temptation to
> develop custom not-quite-right implementations (e.g. ones where the
> decorator actually *creates* and starts the thread)
> It would make a good topic for a PEP, IMO.
Well, why stop at one-function in a thread - why not have:
.... runs func in a threadpool of 10
with threading.pool(10) as pool:
And so on - I can totally buy that it's pep fodder to do it "right"
once, for the stdlib, I've just struggled and debated with a lot of
people about how helpful this really is and the right way of doing it.
The original proposal seems OK at first - just run this function in a
thread - at first glance it seems like it's a harmless decorator to
throw a function into a thread or process. But then what about the
"surprise" that a function call forked a new thread - or new process?
Maybe you're right - maybe this is good PEP territory. If nothing more
we could all hash out the various way of biting yourself in the butt
with these :)
ps: i love controlling thread/process pools with context managers. I'm ill.
More information about the Python-ideas