[pypy-svn] r41596 - in pypy/dist/pypy/translator/js/examples/console: . test
fijal at codespeak.net
fijal at codespeak.net
Wed Mar 28 22:19:20 CEST 2007
Author: fijal
Date: Wed Mar 28 22:19:18 2007
New Revision: 41596
Modified:
pypy/dist/pypy/translator/js/examples/console/session.py
pypy/dist/pypy/translator/js/examples/console/test/test_session.py
Log:
A fix for a case when user closes console and console lives
forever and a few tests.
Modified: pypy/dist/pypy/translator/js/examples/console/session.py
==============================================================================
--- pypy/dist/pypy/translator/js/examples/console/session.py (original)
+++ pypy/dist/pypy/translator/js/examples/console/session.py Wed Mar 28 22:19:18 2007
@@ -14,8 +14,10 @@
import py
import subprocess
from Queue import Queue
-from py.__.green.greensock2 import autogreenlet, Timer, Interrupted
+from py.__.green.greensock2 import autogreenlet, Timer, Interrupted,\
+ meetingpoint
from py.__.green.pipe.fd import FDInput
+from py.magic import greenlet
import time
class Killed(Exception):
@@ -30,8 +32,20 @@
self.read_fd = FDInput(self.pipe.stdout.fileno(), close=False)
self.pid = pipe.pid
self.timeout = timeout
- self.kill_timeout = kill_timeout
- self.last_activity = time.time()
+ #self.kill_timeout = kill_timeout
+ self.giver, accepter = meetingpoint()
+ autogreenlet(self.timeout_kill, accepter, kill_timeout)
+ #self.last_activity = time.time()
+
+ def timeout_kill(self, accepter, timeout):
+ while 1:
+ try:
+ self.kill_timer = Timer(timeout)
+ accepter.accept()
+ self.kill_timer.stop()
+ except Interrupted:
+ self.close()
+ raise Killed()
def timeout_read(self, fd, timeout):
timer = Timer(timeout)
@@ -45,14 +59,11 @@
def write_only(self, to_write):
if to_write is not None:
- self.last_activity = time.time()
+ self.giver.give(42)
self.pipe.stdin.write(to_write)
def interact(self, to_write=None):
self.write_only(to_write)
- if time.time() - self.last_activity > self.kill_timeout:
- self.close()
- raise Killed()
return self.timeout_read(self.read_fd, self.timeout)
def close(self):
@@ -61,6 +72,8 @@
# is blocking, which means it eats all our clean interface)
self.pipe.wait()
+ __del__ = close
+
class InterpreterManager(object):
pass
Modified: pypy/dist/pypy/translator/js/examples/console/test/test_session.py
==============================================================================
--- pypy/dist/pypy/translator/js/examples/console/test/test_session.py (original)
+++ pypy/dist/pypy/translator/js/examples/console/test/test_session.py Wed Mar 28 22:19:18 2007
@@ -4,7 +4,7 @@
import py
-from py.__.green.greensock2 import allof
+from py.__.green.greensock2 import allof, sleep
from py.__.green.pipe.fd import FDInput
from pypy.translator.js.examples.console.session import Interpreter, Killed
@@ -47,5 +47,18 @@
i = Interpreter("python", kill_timeout=1, timeout=3)
while not i.interact().endswith(">>> "):
pass
- i.interact()
py.test.raises(Killed, "i.interact()")
+
+def test_kill_timeout_outside():
+ i = Interpreter("python", kill_timeout=1, timeout=3)
+ while not i.interact().endswith(">>> "):
+ pass
+ py.test.raises(Killed, "sleep(8)")
+
+def test_does_not_die():
+ i = Interpreter("python", kill_timeout=1, timeout=3)
+ while not i.interact().endswith(">>> "):
+ pass
+ i.interact("import time\n")
+ for _ in range(6):
+ i.interact("time.sleep(.2)\n")
More information about the Pypy-commit
mailing list