[shpy-commit] r2825 - in shpy/trunk/dist/shpy/net: . test
arigo@codespeak.net
arigo@codespeak.net
Sun, 18 Jan 2004 20:25:57 +0100 (MET)
Author: arigo
Date: Sun Jan 18 20:25:56 2004
New Revision: 2825
Modified:
shpy/trunk/dist/shpy/net/gateway.py
shpy/trunk/dist/shpy/net/register.py
shpy/trunk/dist/shpy/net/startserver.py
shpy/trunk/dist/shpy/net/test/test_basic.py
Log:
- bug fixes to executing code (flushing correctly)
- the register.register is now more advanced:
it installs the 'shared.py' module on the server if
it doesn't already exist.
- some more small stuff
Modified: shpy/trunk/dist/shpy/net/gateway.py
==============================================================================
--- shpy/trunk/dist/shpy/net/gateway.py (original)
+++ shpy/trunk/dist/shpy/net/gateway.py Sun Jan 18 20:25:56 2004
@@ -2,6 +2,7 @@
import threading, pickle, Queue, select
+from unittest2.tool import dyncode
from shpy.net import common
class SocketGateway:
@@ -19,11 +20,16 @@
t.running = 1
t.gateway = self
t.start()
+ self.running = 1
def exit(self):
+ self.running = 0
for t in self.threads:
t.running = 0
+ def __nonzero__(self):
+ return self.running
+
def exec_remote(self, source):
self.outgoing.put(source)
@@ -34,21 +40,16 @@
self.queue = queue
def run(self):
- # here we want to select for incoming calls.
- # but only if we have the lock.
+ sockfile = self.sock.makefile('rb')
+ unpickler = pickle.Unpickler(sockfile)
while self.running:
- readlist = [self.sock]
- r,w,e = select.select(readlist, [], [], 0.2)
- if self.sock in r:
- try:
- sockfile = self.sock.makefile('r+b')
- unpickler = pickle.Unpickler(sockfile)
- string = unpickler.load()
- self.queue.put(string)
- except:
- import traceback
- traceback.print_exc()
- self.gateway.exit()
+ try:
+ string = unpickler.load()
+ self.queue.put(string)
+ except:
+ import traceback
+ traceback.print_exc()
+ self.gateway.exit()
class QueueExecutor(threading.Thread):
@@ -57,12 +58,13 @@
self.queue = queue
def run(self):
+ ns = { 'clientgw' : self.gateway}
while self.running:
source = self.queue.get()
try:
- ns = { 'fromgateway' : self.gateway}
print "executing source", source[:10]
- exec source in ns
+ co = dyncode.makecode(source)
+ exec co in ns
except:
import traceback, sys
l = traceback.format_exception(*sys.exc_info())
@@ -80,4 +82,6 @@
f = self.sock.makefile('wb')
pickler = pickle.Pickler(f)
pickler.dump(obj)
+ f.close()
+ #print 'sent', `obj`
Modified: shpy/trunk/dist/shpy/net/register.py
==============================================================================
--- shpy/trunk/dist/shpy/net/register.py (original)
+++ shpy/trunk/dist/shpy/net/register.py Sun Jan 18 20:25:56 2004
@@ -1,7 +1,7 @@
-import autopath
+import autopath, os
-def register(hostport = ':8888'):
+def register(hostport = ':8888', share_ns = 'share_ns'):
if isinstance(hostport, str):
host, port = hostport.split(':')
hostport = (host, int(port))
@@ -24,4 +24,17 @@
assert res=='ok', ("could not establish server gateway %r" %
hostport)
- return gateway.SocketGateway(sock)
+ modsource = open(os.path.join(autopath.thisdir, 'shared.py'), 'r').read()
+ gw = gateway.SocketGateway(sock)
+ gw.exec_remote("""
+ try:
+ import %(share_ns)s as shared
+ except ImportError:
+ import new, sys
+ shared = new.module(%(share_ns)r)
+ exec %(modsource)r in vars(shared)
+ sys.modules[%(share_ns)r] = shared
+ shared.registerclient(clientgw)
+
+ """ % locals())
+ return gw
Modified: shpy/trunk/dist/shpy/net/startserver.py
==============================================================================
--- shpy/trunk/dist/shpy/net/startserver.py (original)
+++ shpy/trunk/dist/shpy/net/startserver.py Sun Jan 18 20:25:56 2004
@@ -1,3 +1,5 @@
+#! /usr/bin/env python
+
"""
start unpickling exec server
@@ -38,7 +40,7 @@
'unpickler' : unpickler,
'pickler' : pickler}
co = dyncode.makecode(unpickler.load())
- exec co in g,g
+ exec co in g
except KeyboardInterrupt:
sys.exit(1)
except:
Modified: shpy/trunk/dist/shpy/net/test/test_basic.py
==============================================================================
--- shpy/trunk/dist/shpy/net/test/test_basic.py (original)
+++ shpy/trunk/dist/shpy/net/test/test_basic.py Sun Jan 18 20:25:56 2004
@@ -30,7 +30,7 @@
def test_1_server_initialization():
gw = getservergateway()
- gw.exec_remote('print hello\n')
+ gw.exec_remote('fromgateway.exec_remote( ')
#res = gw.call_synchronous(functest.f)
#check.equal(res, 42)