brought examples up-to-date
This commit is contained in:
@@ -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.green import socket
|
||||||
from eventlet.coros import Job
|
|
||||||
|
|
||||||
# this example works with both standard eventlet hubs and with twisted-based hub
|
# this example works with both standard eventlet hubs and with twisted-based hub
|
||||||
# comment out the following line to use standard eventlet hub
|
# uncomment the following line to use twisted hub
|
||||||
from twisted.internet import reactor
|
#from twisted.internet import reactor
|
||||||
|
|
||||||
def geturl(url):
|
def geturl(url):
|
||||||
c = socket.socket()
|
c = socket.socket()
|
||||||
ip = socket.gethostbyname(url)
|
ip = socket.gethostbyname(url)
|
||||||
c.connect((ip, 80))
|
c.connect((ip, 80))
|
||||||
|
print '%s connected' % url
|
||||||
c.send('GET /\r\n\r\n')
|
c.send('GET /\r\n\r\n')
|
||||||
return c.recv(1024)
|
return c.recv(1024)
|
||||||
|
|
||||||
urls = ['www.google.com', 'www.yandex.ru', 'www.python.org']
|
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)
|
print 'spawned %s jobs' % len(jobs)
|
||||||
|
|
||||||
# collect the results from workers, one by one
|
# collect the results from workers
|
||||||
for url, job in zip(urls, jobs):
|
results = proc.waitall(jobs)
|
||||||
print '%s: %s' % (url, repr(job.wait())[:50])
|
# 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])
|
||||||
|
|
||||||
|
@@ -63,5 +63,6 @@ def format_response(response):
|
|||||||
class MyFactory(Factory):
|
class MyFactory(Factory):
|
||||||
protocol = LineOnlyReceiver
|
protocol = LineOnlyReceiver
|
||||||
|
|
||||||
|
print __doc__
|
||||||
reactor.listenTCP(8888, MyFactory())
|
reactor.listenTCP(8888, MyFactory())
|
||||||
reactor.run()
|
reactor.run()
|
||||||
|
@@ -3,9 +3,9 @@
|
|||||||
USAGE: twisted_portforward.py local_port remote_host remote_port"""
|
USAGE: twisted_portforward.py local_port remote_host remote_port"""
|
||||||
import sys
|
import sys
|
||||||
from twisted.internet import reactor
|
from twisted.internet import reactor
|
||||||
from eventlet.coros import Job
|
|
||||||
from eventlet.twistedutil import join_reactor
|
from eventlet.twistedutil import join_reactor
|
||||||
from eventlet.twistedutil.protocol import GreenClientCreator, SpawnFactory, UnbufferedTransport
|
from eventlet.twistedutil.protocol import GreenClientCreator, SpawnFactory, UnbufferedTransport
|
||||||
|
from eventlet import proc
|
||||||
|
|
||||||
def forward(source, dest):
|
def forward(source, dest):
|
||||||
try:
|
try:
|
||||||
@@ -22,10 +22,9 @@ def handler(local):
|
|||||||
client = str(local.getHost())
|
client = str(local.getHost())
|
||||||
print 'accepted connection from %s' % client
|
print 'accepted connection from %s' % client
|
||||||
remote = GreenClientCreator(reactor, UnbufferedTransport).connectTCP(remote_host, remote_port)
|
remote = GreenClientCreator(reactor, UnbufferedTransport).connectTCP(remote_host, remote_port)
|
||||||
a = Job.spawn_new(forward, remote, local)
|
a = proc.spawn(forward, remote, local)
|
||||||
b = Job.spawn_new(forward, local, remote)
|
b = proc.spawn(forward, local, remote)
|
||||||
a.wait()
|
proc.waitall([a, b], trap_errors=True)
|
||||||
b.wait()
|
|
||||||
print 'closed connection to %s' % client
|
print 'closed connection to %s' % client
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@@ -33,6 +33,7 @@ class Chat:
|
|||||||
finally:
|
finally:
|
||||||
self.participants.remove(conn)
|
self.participants.remove(conn)
|
||||||
|
|
||||||
|
print __doc__
|
||||||
chat = Chat()
|
chat = Chat()
|
||||||
from twisted.internet import reactor
|
from twisted.internet import reactor
|
||||||
reactor.listenTCP(8007, SpawnFactory(chat.handler, LineOnlyReceiverTransport))
|
reactor.listenTCP(8007, SpawnFactory(chat.handler, LineOnlyReceiverTransport))
|
||||||
|
@@ -8,21 +8,16 @@ from eventlet.twistedutil.protocols.basic import LineOnlyReceiverTransport
|
|||||||
class NoisySRVConnector(SRVConnector):
|
class NoisySRVConnector(SRVConnector):
|
||||||
|
|
||||||
def _ebGotServers(self, failure):
|
def _ebGotServers(self, failure):
|
||||||
#self.failure = failure
|
|
||||||
return SRVConnector._ebGotServers(self, failure)
|
return SRVConnector._ebGotServers(self, failure)
|
||||||
|
|
||||||
def pickServer(self):
|
def pickServer(self):
|
||||||
host, port = SRVConnector.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)
|
print 'Resolved _%s._%s.%s --> %s:%s' % (self.service, self.protocol, self.domain, host, port)
|
||||||
return host, port
|
return host, port
|
||||||
|
|
||||||
# why TypeError is not raised here?
|
|
||||||
|
|
||||||
cred = X509Credentials(None, None)
|
cred = X509Credentials(None, None)
|
||||||
creator = GreenClientCreator(reactor, LineOnlyReceiverTransport)
|
creator = GreenClientCreator(reactor, LineOnlyReceiverTransport)
|
||||||
conn = creator.connectSRV('msrpsx', 'ag-projects.com',
|
conn = creator.connectSRV('msrps', 'ag-projects.com',
|
||||||
connectFuncName='connectTLS', connectFuncArgs=(cred,),
|
connectFuncName='connectTLS', connectFuncArgs=(cred,),
|
||||||
ConnectorClass=NoisySRVConnector)
|
ConnectorClass=NoisySRVConnector)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user