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