2 from eventlet import greenio
7 _proc_status = '/proc/%d/status' % os.getpid()
9 _scale = {'kB': 1024.0, 'mB': 1024.0 * 1024.0,
10 'KB': 1024.0, 'MB': 1024.0 * 1024.0}
16 global _proc_status, _scale
17 # get pseudo file /proc/<pid>/status
19 t = open(_proc_status)
23 return 0.0 # non-Linux?
24 # get VmKey line e.g. 'VmRSS: 9999 kB\n ...'
26 v = v[i:].split(None, 3) # whitespace
28 return 0.0 # invalid format?
29 # convert Vm value to bytes
30 return float(v[1]) * _scale[v[2]]
33 def memory(since=0.0):
34 '''Return memory usage in bytes.
36 return _VmB('VmSize:') - since
39 def resident(since=0.0):
40 '''Return resident memory usage in bytes.
42 return _VmB('VmRSS:') - since
45 def stacksize(since=0.0):
46 '''Return stack size in bytes.
48 return _VmB('VmStk:') - since
51 def test_pipe_writes_large_messages():
54 r = greenio.GreenPipe(r)
55 w = greenio.GreenPipe(w, 'w')
57 large_message = b"".join([1024 * chr(i) for i in range(65)])
60 w.write(large_message)
63 gt = eventlet.spawn(writer)
67 expected = 1024 * chr(i)
70 "expected=%r..%r, found=%r..%r iter=%d"
71 % (expected[:4], expected[-4:], buf[:4], buf[-4:], i))
75 if __name__ == "__main__":
78 test_pipe_writes_large_messages()
82 print("_iter = %d, VmSize: %d, VmRSS = %d, VmStk = %d" %
83 (_iter, memory(), resident(), stacksize()))