[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