Sounds fine. Btw, I'd argue with a different set_args() I always found it weird to have separate 'bind' and 'setup'
How about extending "bind" like this: def bind(self, function, args=None, keywords=None): The presence of args and/or keywords as being non-None, would then imply a setup, without scheduling it. K > -----Original Message----- > From: [email protected] [mailto:stackless- > [email protected]] On Behalf Of Anselm Kruis > Sent: 19. nóvember 2013 11:16 > To: [email protected] > Subject: Re: [Stackless] Proposal: new tasklet method set_args(*args, **kw) > that combines setup() and remove() > > Hi Kristján, > > I wasn't aware of stackless.atomic(). It's not yet documented. > > Obviously there are a few pending issues before we can release 2.7.6-slp. > > - add set_args() > - add run_remove() > - update the documentation > - update the changelog > > Anything else? We should really try to create a consistent and well > documented release. > > Cheers > Anselm > > > Am 19.11.2013 10:16, schrieb Kristján Valur Jónsson: > > It does, inasmuch that the implicit "insert" that exists on many methods is > indeed annoying. > > But it is not really a problem, because: > > > > def set_args(t, args=(), kw={}): > > with stackless.atomic(): > > t.setup(*args, **kw): > > t.remove() > > > > > > A more annoying problem that isn't solvable, and that is that there is no > run_remove(), i.e. no way switch to a tasklet and remove the caller from the > run queue. > > This is something that is needed in stacklesslib.async: > > > > > > def call_async(callable, args=(), kwargs={}): > > awaiter = Awaiter(stackless.getcurrent()) > > callee = stackless.tasklet(async_call_helper) > > future = futures.Future() > > with atomic(): > > callee(future, awaiter, callable, args, kwargs) > > try: > > # here, a run(remove=True) or a switch() primitive would be > > useful > > callee.run() > > finally: > > # need this here, in case caller gets awoken by other means, > > e.g. > exception > > awaiter.caller_continued = True > > return future > > > > def async_call_helper(future, awaiter, callable, args, kwargs): > > # remove the caller from the runnables queue. There is a window here > where other tasklets > > # might run, we need perhaps a primitive to perform this task > > try: > > awaiter.caller.remove() > > > > > > > >> -----Original Message----- > >> From: [email protected] [mailto:stackless- > >> [email protected]] On Behalf Of Anselm Kruis > >> Sent: 18. nóvember 2013 10:39 > >> To: [email protected] > >> Subject: [Stackless] Proposal: new tasklet method set_args(*args, > >> **kw) that combines setup() and remove() > >> > >> Hi, > >> > >> I propose to add a new method set_args(*args, **kw) to class tasklet, > >> that combines > >> > >> stackless.setup(*args, **kw) > >> stackless.remove() > >> > >> Rationale: it is currently not possible to create an alive tasklet > >> without scheduling it (except via unpickling or direct __setstate__). > >> > >> With the new bind_thread() method, one can think of use cases where > >> one thread creates tasklets and another thread executes them. No need > >> to insert these tasklets into the current run queue. It could even cause > races. > >> > >> With set_args() in place, setup() would become a simple shortcut for > >> set_args() followed by insert(). > >> > >> Does this proposal make sense? > >> > >> regards > >> Anselm > >> > >> -- > >> Dipl. Phys. Anselm Kruis science + computing ag > >> Senior Solution Architect Ingolstädter Str. 22 > >> email [email protected]<mailto:A.Kruis@science- > computing.de> 80807 München, Germany > >> phone +49 89 356386 874 fax 737 www.science- > computing.de<http://www.science-computing.de> > >> -- > >> Vorstandsvorsitzender/Chairman of the board of management: > >> Gerd-Lothar Leonhart > >> Vorstand/Board of Management: > >> Dr. Bernd Finkbeiner, Michael Heinrichs, Dr. Arno Steitz, Dr. Ingrid > >> Zech Vorsitzender des Aufsichtsrats/ Chairman of the Supervisory Board: > >> Philippe Miltin > >> Sitz/Registered Office: Tuebingen > >> Registergericht/Registration Court: Stuttgart > >> Registernummer/Commercial Register No.: HRB 382196 > >> > >> > >> _______________________________________________ > >> Stackless mailing list > >> [email protected]<mailto:[email protected]> > >> http://www.stackless.com/mailman/listinfo/stackless > > > > > > > > > > It does, inasmuch that the implicit "insert" that exists on many > > methods is indeed annoying. > > But it is not really a problem, because: > > def set_args(t, args=(), kw={}): > > with stackless.atomic(): > > t.setup(*args, **kw): > > t.remove() > > A more annoying problem that isn't solvable, and that is that there is > > no run_remove(), i.e. no way switch to a tasklet and remove the caller > > from the run queue. > > This is something that is needed in stacklesslib.async: > > def call_async(callable, args=(), kwargs={}): > > awaiter = Awaiter(stackless.getcurrent()) > > callee = stackless.tasklet(async_call_helper) > > future = futures.Future() > > with atomic(): > > callee(future, awaiter, callable, args, kwargs) > > try: > > # here, a run(remove=True) or a switch() primitive would be useful > > callee.run() > > finally: > > # need this here, in case caller gets awoken by other > > means, e.g. exception > > awaiter.caller_continued = True > > return future > > def async_call_helper(future, awaiter, callable, args, kwargs): > > # remove the caller from the runnables queue. There is a window > > here where other tasklets > > # might run, we need perhaps a primitive to perform this task > > try: > > awaiter.caller.remove() > >> -----Original Message----- > >> From: [email protected] [mailto:stackless- > >> [email protected]] On Behalf Of Anselm Kruis > >> Sent: 18. nóvember 2013 10:39 > >> To: [email protected] > >> Subject: [Stackless] Proposal: new tasklet method set_args(*args, > >> **kw) that combines setup() and remove() > >> > >> Hi, > >> > >> I propose to add a new method set_args(*args, **kw) to class tasklet, > >> that combines > >> > >> stackless.setup(*args, **kw) > >> stackless.remove() > >> > >> Rationale: it is currently not possible to create an alive tasklet > >> without scheduling it (except via unpickling or direct __setstate__). > >> > >> With the new bind_thread() method, one can think of use cases where > >> one thread creates tasklets and another thread executes them. No need > >> to insert these tasklets into the current run queue. It could even cause > races. > >> > >> With set_args() in place, setup() would become a simple shortcut for > >> set_args() followed by insert(). > >> > >> Does this proposal make sense? > >> > >> regards > >> Anselm > >> > >> -- > >> Dipl. Phys. Anselm Kruis science + computing ag > >> Senior Solution Architect Ingolstädter Str. 22 > >> [email protected] > > <mailto:[email protected]> 80807 München, Germany > >> phone +49 89 356386 874 fax 737www.science-computing.de > >> <http://www.science-computing.de> > >> -- > >> Vorstandsvorsitzender/Chairman of the board of management: > >> Gerd-Lothar Leonhart > >> Vorstand/Board of Management: > >> Dr. Bernd Finkbeiner, Michael Heinrichs, Dr. Arno Steitz, Dr. Ingrid > >> Zech Vorsitzender des Aufsichtsrats/ Chairman of the Supervisory Board: > >> Philippe Miltin > >> Sitz/Registered Office: Tuebingen > >> Registergericht/Registration Court: Stuttgart > >> Registernummer/Commercial Register No.: HRB 382196 > >> > >> > >> _______________________________________________ > >> Stackless mailing list > >>[email protected] <mailto:[email protected]> > >>http://www.stackless.com/mailman/listinfo/stackless > > > > > > _______________________________________________ > > Stackless mailing list > > [email protected] > > http://www.stackless.com/mailman/listinfo/stackless > > > > -- > Dipl. Phys. Anselm Kruis science + computing ag > Senior Solution Architect Ingolstädter Str. 22 > email [email protected] 80807 München, Germany > phone +49 89 356386 874 fax 737 www.science-computing.de > -- > Vorstandsvorsitzender/Chairman of the board of management: > Gerd-Lothar Leonhart > Vorstand/Board of Management: > Dr. Bernd Finkbeiner, Michael Heinrichs, Dr. Arno Steitz, Dr. Ingrid Zech > Vorsitzender des Aufsichtsrats/ Chairman of the Supervisory Board: > Philippe Miltin > Sitz/Registered Office: Tuebingen > Registergericht/Registration Court: Stuttgart Registernummer/Commercial > Register No.: HRB 382196 > > > _______________________________________________ > Stackless mailing list > [email protected] > http://www.stackless.com/mailman/listinfo/stackless > _______________________________________________ Stackless mailing list [email protected] http://www.stackless.com/mailman/listinfo/stackless
