[pypy-svn] r57976 - in pypy/branch/cross-compilation/pypy/translator/benchmark: . test
fijal at codespeak.net
fijal at codespeak.net
Mon Sep 8 17:05:58 CEST 2008
Author: fijal
Date: Mon Sep 8 17:05:54 2008
New Revision: 57976
Modified:
pypy/branch/cross-compilation/pypy/translator/benchmark/bench_mem.py
pypy/branch/cross-compilation/pypy/translator/benchmark/test/test_bench_mem.py
Log:
More support for running cooperative benchmarks
Modified: pypy/branch/cross-compilation/pypy/translator/benchmark/bench_mem.py
==============================================================================
--- pypy/branch/cross-compilation/pypy/translator/benchmark/bench_mem.py (original)
+++ pypy/branch/cross-compilation/pypy/translator/benchmark/bench_mem.py Mon Sep 8 17:05:54 2008
@@ -53,6 +53,7 @@
realos = os
def __init__(self, name, args):
+ self.pid = -1
signal.signal(signal.SIGCHLD, lambda a,b: self.close())
self.pid = run_child(name, args)
self.results = []
@@ -84,6 +85,32 @@
def __del__(self):
self.close()
+def run_cooperative(func):
+ """ The idea is that we fork() and execute the function func in one
+ process. In parent process we measure private memory obtained by a process
+ when we read anything in pipe. We send back that we did that
+ """
+ parentread, childwrite = os.pipe()
+ childread, parentwrite = os.pipe()
+ pid = os.fork()
+ if not pid:
+ os.close(parentread)
+ os.close(parentwrite)
+ try:
+ func(lambda : os.read(childread, 1),
+ lambda x: os.write(childwrite, x))
+ except (SystemExit, KeyboardInterrupt):
+ pass
+ except:
+ import traceback
+ traceback.print_tb(sys.exc_info()[2])
+ os._exit(1)
+ os.close(childread)
+ os.close(childwrite)
+ return (lambda : os.read(parentread, 1),
+ lambda x: os.write(parentwrite, x),
+ pid)
+
def run_child(name, args):
pid = os.fork()
if not pid:
Modified: pypy/branch/cross-compilation/pypy/translator/benchmark/test/test_bench_mem.py
==============================================================================
--- pypy/branch/cross-compilation/pypy/translator/benchmark/test/test_bench_mem.py (original)
+++ pypy/branch/cross-compilation/pypy/translator/benchmark/test/test_bench_mem.py Mon Sep 8 17:05:54 2008
@@ -23,6 +23,17 @@
'/lib/libncurses.so.5.6' : 60,
}
+def test_run_cooperative():
+ def f(read, write):
+ x = read()
+ assert x == '3'
+ write('4')
+
+ read, write, pid = bench_mem.run_cooperative(f)
+ assert pid
+ write('3')
+ assert read() == '4'
+
example_data = '''
08048000-0813f000 r-xp 00000000 fd:00 75457 /usr/bin/python2.5
Size: 988 kB
More information about the Pypy-commit
mailing list