Thanks Anselm and Jónsson for your explanations and pointers. Now I
can see why stackless.run() is not mandatory for switching tasklets.

On Mon, Jun 22, 2015 at 9:15 PM, Kristján Valur Jónsson
<swesk...@gmail.com> wrote:
> The stackless run queue is implicit and whenever a tasklet blocks (i.e. when
> doing channel operations and sender/receiver isn't available), a "runnable"
> tasklet from the run queue is fetched and switched to.
> stackless.run() is a tool to suspend the current tasklet while there are
> runnable tasklets in the queue.
> You can achieve a similar effect by doing:
> while stackless.runcount > 1:
>     stackless.schedule()
>
>
> On 22 June 2015 at 15:25, Anselm Kruis <a.kr...@science-computing.de> wrote:
>>
>> Hi,
>>
>> I'm not so firm with the channel code, but I think it is fairly simple to
>> explain. Have a look at the documentation of the tasklet life cycle:
>> https://stackless.readthedocs.org/en/2.7-slp/library/stackless/tasklets.html#tasklet-life-cycle
>>
>> As you can see, tasklet can become "current" without a running scheduler.
>> At the end of this section there is a simplified documentation of the
>> internal working of the stackless.run() function. It does not enter a
>> tasklet into the scheduler queue and it is not the only way to switch
>> tasklets.
>>
>> Your example uses 2 tasklets:
>> 1. the main tasklet
>> 2. the tasklet "self.fun"
>>
>> The line "stackless.tasklet(self.fun)()" creates and schedules tasklet
>> fun().
>>
>> Then the main tasklet sends a message to through the channel self.ch. This
>> causes stackless to change the state of the main tasklet to "blocked on
>> channel" (See
>> https://stackless.readthedocs.org/en/2.7-slp/library/stackless/channels.html#channel.send
>> "If no other tasklet is already receiving on the channel, the sender will be
>> blocked."). At the same moment the next tasklet on the schedule queue, that
>> is tasklet "self.fun" becomes "current". It receives the message from the
>> channel self.ch. This changes the state of the main tasklet from "blocked on
>> channel" to "scheduled". Then tasklet self.fun runs to the end of method
>> self.fun and terminates. This again triggers the scheduler and now the main
>> tasklet becomes current again.
>>
>> To observe the details, you may want to study the tracing example at
>>
>> https://bitbucket.org/stackless-dev/stackless/src/9f2a496e6ba2cf9680e357451a8d75821d0ebb72/Stackless/demo/tracing.py?at=2.7-slp
>>
>> Regards
>>   Anselm
>>
>>
>>
>> Am 22.06.2015 um 13:55 schrieb temp sha:
>>>
>>> hi,
>>>
>>> any help in understanding the program will be highly appreciated.
>>> as per the stackless documentation stackless.run() is must
>>> to start a scheduler. then how come the below program runs
>>> the tasklet "fun" without stackless.run() call?
>>>
>>>
>>> thanks in advance.
>>>
>>>
>>> On Fri, Jun 19, 2015 at 2:36 AM, temp sha <temp....@gmail.com> wrote:
>>>>
>>>> Hi,
>>>>
>>>> I could not understand how the below program executes function "fun"
>>>> without calling stackless.run() in the program?  Here "fun" runs as a
>>>> tasklet and as per my knowledge for that stackless.run() is must.
>>>>
>>>>
>>>>
>>>> -----------------------------------------------------------------
>>>> import stackless
>>>>
>>>> class A:
>>>>      def __init__(self,name):
>>>>          self.name = name
>>>>          self.ch = stackless.channel()
>>>>          stackless.tasklet(self.fun)()
>>>>
>>>>      def __call__(self,val):
>>>>          self.ch.send(val)
>>>>
>>>>      def fun(self):
>>>>         while 1:
>>>>           v = self.ch.receive()
>>>>           print "hi" , v
>>>>
>>>>
>>>> if __name__ == "__main__":
>>>>      obj = A("sh")
>>>>      obj(6)
>>>> -----------------------------------------------------------------
>>>>
>>>> output:
>>>> ----------
>>>> hi 6
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> thanks,
>>>> ravi
>>>
>>>
>>> _______________________________________________
>>> Stackless mailing list
>>> Stackless@stackless.com
>>> http://www.stackless.com/mailman/listinfo/stackless
>>>
>>
>> --
>>  Dipl. Phys. Anselm Kruis                       science + computing ag
>>  Senior Solution Architect                      Ingolstädter Str. 22
>>  email a.kr...@science-computing.de             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, Dr. Arno Steitz
>> 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@stackless.com
>> http://www.stackless.com/mailman/listinfo/stackless
>
>
>
> _______________________________________________
> Stackless mailing list
> Stackless@stackless.com
> http://www.stackless.com/mailman/listinfo/stackless

_______________________________________________
Stackless mailing list
Stackless@stackless.com
http://www.stackless.com/mailman/listinfo/stackless

Reply via email to