[Stackless] Proposal: new tasklet method set_args(*args, **kw) that combines setup() and remove()
Kristján Valur Jónsson
kristjan at ccpgames.com
Tue Nov 19 10:16:36 CET 2013
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: stackless-bounces at stackless.com [mailto:stackless-
> bounces at stackless.com] On Behalf Of Anselm Kruis
> Sent: 18. nóvember 2013 10:39
> To: stackless at stackless.com
> 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 A.Kruis at science-computing.de<mailto:A.Kruis at 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
> Stackless at stackless.com<mailto:Stackless at stackless.com>
> http://www.stackless.com/mailman/listinfo/stackless
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.stackless.com/pipermail/stackless/attachments/20131119/135851bb/attachment-0001.html>
More information about the Stackless
mailing list