brought examples up-to-date

This commit is contained in:
Denis Bilenko
2009-01-12 16:27:37 +06:00
parent 2511e14c4f
commit 2948ef52ae
5 changed files with 21 additions and 21 deletions

View File

@@ -1,27 +1,31 @@
"""Spawn multiple greenlet-workers and collect their results.
"""Spawn multiple workers and collect their results.
Demonstrates how to use eventlet.green package and coros.Job.
Demonstrates how to use eventlet.green package and proc module.
"""
from eventlet import proc
from eventlet.green import socket
from eventlet.coros import Job
# this example works with both standard eventlet hubs and with twisted-based hub
# comment out the following line to use standard eventlet hub
from twisted.internet import reactor
# uncomment the following line to use twisted hub
#from twisted.internet import reactor
def geturl(url):
c = socket.socket()
ip = socket.gethostbyname(url)
c.connect((ip, 80))
print '%s connected' % url
c.send('GET /\r\n\r\n')
return c.recv(1024)
urls = ['www.google.com', 'www.yandex.ru', 'www.python.org']
jobs = [Job.spawn_new(geturl, x) for x in urls]
jobs = [proc.spawn(geturl, x) for x in urls]
print 'spawned %s jobs' % len(jobs)
# collect the results from workers, one by one
for url, job in zip(urls, jobs):
print '%s: %s' % (url, repr(job.wait())[:50])
# collect the results from workers
results = proc.waitall(jobs)
# Note, that any exception in the workers will be reraised by waitall
# unless trap_errors argument specifies otherwise
for url, result in zip(urls, results):
print '%s: %s' % (url, repr(result)[:50])

View File

@@ -63,5 +63,6 @@ def format_response(response):
class MyFactory(Factory):
protocol = LineOnlyReceiver
print __doc__
reactor.listenTCP(8888, MyFactory())
reactor.run()

View File

@@ -3,9 +3,9 @@
USAGE: twisted_portforward.py local_port remote_host remote_port"""
import sys
from twisted.internet import reactor
from eventlet.coros import Job
from eventlet.twistedutil import join_reactor
from eventlet.twistedutil.protocol import GreenClientCreator, SpawnFactory, UnbufferedTransport
from eventlet import proc
def forward(source, dest):
try:
@@ -22,10 +22,9 @@ def handler(local):
client = str(local.getHost())
print 'accepted connection from %s' % client
remote = GreenClientCreator(reactor, UnbufferedTransport).connectTCP(remote_host, remote_port)
a = Job.spawn_new(forward, remote, local)
b = Job.spawn_new(forward, local, remote)
a.wait()
b.wait()
a = proc.spawn(forward, remote, local)
b = proc.spawn(forward, local, remote)
proc.waitall([a, b], trap_errors=True)
print 'closed connection to %s' % client
try:

View File

@@ -33,6 +33,7 @@ class Chat:
finally:
self.participants.remove(conn)
print __doc__
chat = Chat()
from twisted.internet import reactor
reactor.listenTCP(8007, SpawnFactory(chat.handler, LineOnlyReceiverTransport))

View File

@@ -8,21 +8,16 @@ from eventlet.twistedutil.protocols.basic import LineOnlyReceiverTransport
class NoisySRVConnector(SRVConnector):
def _ebGotServers(self, failure):
#self.failure = failure
return SRVConnector._ebGotServers(self, failure)
def pickServer(self):
host, port = SRVConnector.pickServer(self)
#if not isinstance(port, int) and self.failure:
# self.failure.raiseException()
print 'Resolved _%s._%s.%s --> %s:%s' % (self.service, self.protocol, self.domain, host, port)
return host, port
# why TypeError is not raised here?
cred = X509Credentials(None, None)
creator = GreenClientCreator(reactor, LineOnlyReceiverTransport)
conn = creator.connectSRV('msrpsx', 'ag-projects.com',
conn = creator.connectSRV('msrps', 'ag-projects.com',
connectFuncName='connectTLS', connectFuncArgs=(cred,),
ConnectorClass=NoisySRVConnector)