3
from socket import socket
4
from py.__.green.msgstruct import decodemessage, message
5
from socket import socket, AF_INET, SOCK_STREAM
12
print >>sys.stderr, msg
14
class SocketWrapper(object):
15
def __init__(self, conn):
20
msg, self.buffer = decodemessage(self.buffer)
22
self.buffer += self.conn.recv(8192)
23
msg, self.buffer = decodemessage(self.buffer)
25
trace("received %s" % msg[1])
26
return marshal.loads(msg[1])
29
trace("sending %s" % (data,))
30
self.conn.sendall(message('c', marshal.dumps(data)))
33
def socket_listener(address=('', 12122), socket=socket):
34
s = socket(AF_INET, SOCK_STREAM)
37
print "Waiting for connection"
38
conn, addr = s.accept()
40
sw = SocketWrapper(conn)
41
return sw.send, sw.receive
43
def socket_connecter(address, socket=socket):
44
s = socket(AF_INET, SOCK_STREAM)
45
print "Connecting %s" % (address,)
49
return sw.send, sw.receive
51
def spawn_remote_side(code, gw):
52
""" A very simple wrapper around greenexecnet to allow
53
spawning a remote side of lib/distributed
55
from distributed import RemoteProtocol
56
extra = str(py.code.Source("""
57
from distributed import remote_loop, RemoteProtocol
58
remote_loop(RemoteProtocol(channel.send, channel.receive, globals()))
60
channel = gw.remote_exec(code + "\n" + extra)
61
return RemoteProtocol(channel.send, channel.receive)