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:[email protected]>     
>         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


_______________________________________________
Stackless mailing list
[email protected]
http://www.stackless.com/mailman/listinfo/stackless

Reply via email to