Monkey-patching is simply replacing the low level operations (like the socket module and the select.select function and the time.sleep function and so forth). These normally block the whole thread (and therefore scheduler) until the operation is complete.
So you write some code to import these modules and replace attributes and objects with one's that just block the calling tasklet. The tasklet is either awakened by some non-blocking method or callback or simply farming the work off to another thread transparently, when the operation completes. Only you don't need to do this monkey patching yourself, because Kristjan has released and updates the source code to a small library that CCP uses in some projects - stacklesslib. You can find it on bitbucket: https://bitbucket.org/stackless-dev/stacklesslib Most third party code will just work if you do the monkeypatching first, then import the django or whatever, and then just go about your business. There are some cases where the code won't work, and you need to muck around a little to get it to work. Graphical frameworks, perhaps like tkinter, pyqt, pygame and so forth often have main loops. In those cases they need to run a call to the stackless scheduler, or have the scheduler do a secondary poll call of some sort, rather than running the main loop. I'm sure someone has already covered how to get django running with stackless somewhere. I think CCP did it at some point. There's also a wikipedia page on monkeypatching if you are not familiar with the general concept: http://en.wikipedia.org/wiki/Monkey_patch Cheers, Richard. On 1/3/14, Robert Babiak <[email protected]> wrote: > Thanks Richard. > > but what do you mean by "monkeypatch it via stacklesslib" how/ where can i > learn about MonkeyPatching? > > Then I would assume I would just run it as any other tasklet, which I would > suspect would solve several problems i have with passing events, and SQL > calls on the wrong thread. > > - Rob > > ---------- Forwarded message ---------- > From: Richard Tew <[email protected]> > To: The Stackless Python Mailing List <[email protected]> > Cc: > Date: Thu, 2 Jan 2014 11:58:39 +1300 > Subject: Re: [Stackless] multiprocessing module and stackless threads > If your web server uses non-blocking IO, then it shouldn't be > necessary to have two schedulers. I imagine with Django, you would > monkeypatch it via stacklesslib and it would then work in a > stackless-compatible non-blocking fashion. > > Stackless supports per-thread schedulers, and explicitly supports > interthread channel communication. There is no explicit Stackless > support for multiprocessing. If it opaquely uses threads, then it > works in the manner mentioning threads above. If interthread channel > usage is not being used, then channels switch between tasklets on the > same Python thread. > > Cheers, > Richard. > > On 1/2/14, Robert Babiak <[email protected]> wrote: >> I have a question. >> >> Is it possible to use the multi processing module and stackless together? >> >> What i would like to do is have my application start a second process to >> handle the web server side of things, and the main thread control the >> main >> display. >> >> Can the two communicate via channels, or is the separate process > completely >> independant? >> >> If I don't use the multiprocessing and just use the threading module to >> make a dedicated web server thread. Would it be better to run two > stackless >> schedulers and have the one only run a single tasklet running the web >> server request loop? >> >> FYI: I am using DJANGO for the web server support, and the main display >> is >> a Open GL display. The main interaction to the display will be by web >> requests, but only some web calls will interact with the GL display. >> >> Suggestions and wisdom welcome. >> >> - robert >> -- >> Life: Bah, I will worry about it when it is over. >> > > -- > Life: Bah, I will worry about it when it is over. > _______________________________________________ Stackless mailing list [email protected] http://www.stackless.com/mailman/listinfo/stackless
