[Stackless] Simple Server Example On second thought...Twisted + Stackless?
Andrew Francis
andrewfr_ice at yahoo.com
Fri Nov 17 02:40:08 CET 2006
Hello Kuros:
>I have most of the framework already written, so I'm
>talking about rewriting it with stackless in my
previous >message. I use twisted for the networking
core on what >I've done so far...is it possible for me
to leave that
>part alone and integrate stackless somehow?
I would have to look at your code to determine this.
However here is a simple example of how to use Twisted
with Stackless. The server is based on
requestHandler.py on page 41 of the "Twisted Network
Programming Essentials" book. The trick is to have the
Twisted request handlers and tasklets share a channel.
When I have time, I will put this on the Wiki.
"""
Simulate Cgi scripts
example of using Twisted with Stackless Python
The request handler simply echos back the CGI path and
the number of times the cgi script tasklet is called
"""
#!/usr/bin/env python
import stackless
from twisted.web import http
"""
The server tasklet
"""
class Server(object):
def execute(self, port, scripts):
"""
give the handler a dictionary of <path,
channel>
"""
MyRequestHandler.scripts = scripts
reactor.listenTCP(port, MyHttpFactory())
reactor.run()
"""
cgi script
"""
class Cgi(object):
def __init__(self, name, channel):
self.name = name
self.channel = channel
self.count = 0
return
def execute(self):
while (1):
path = self.channel.receive()
print path
self.channel.send("<html><body>" + \
str(self.name) + "
received path: " + path + "count :" + str(self.count)
+ \
"</body></html>")
self.count = self.count + 1
stackless.schedule()
class MyRequestHandler(http.Request):
scripts = None
def process(self):
# look up the channel of the cgiScript
associated with path
self.scripts[self.path].send(self.path)
# receive the output
result = self.scripts[self.path].receive()
# write back to the http agent
self.write(result)
self.finish()
class MyHttp(http.HTTPChannel):
requestFactory = MyRequestHandler
class MyHttpFactory(http.HTTPFactory):
protocol = MyHttp
if __name__ == "__main__":
from twisted.internet import reactor
cgiScripts = {}
"""
let us generate some cgiScript tasklets
"""
for s in range(0,100):
path = "/" + str(s)
channel = stackless.channel()
cgiScripts[path] = channel
cgiTasklet = Cgi(s, channel)
stackless.tasklet(cgiTasklet.execute)()
"""
start the server
"""
server = Server()
stackless.tasklet(server.execute)(8000,
cgiScripts)
while (stackless.getruncount() > 1):
stackless.schedule()
____________________________________________________________________________________
Sponsored Link
Mortgage rates near 39yr lows.
$510k for $1,698/mo. Calculate new payment!
www.LowerMyBills.com/lre
_______________________________________________
Stackless mailing list
Stackless at stackless.com
http://www.stackless.com/mailman/listinfo/stackless
More information about the Stackless
mailing list