Right, I narrowed it down to condition.wait being much slower with a timeout than without. see attached test script.
On 22 February 2014 08:20, Armin Rigo <ar...@tunes.org> wrote: > Hi Dima, > > On 21 February 2014 15:43, Dima Tisnek <dim...@gmail.com> wrote: >> sorry I don't have code handy, it's part of a larger project, but if >> someone's interested, please reply and I'll hack up a short test case. > > Please do. > > > Armin
import time import logging import threading lock = threading.RLock() ops = 0 class T(threading.Thread): def run(self): while True: with self.cond: while not self.baton: #self.cond.wait() # fast self.cond.wait(10) # slow global ops ops += 1 self.next.baton, self.baton = self.baton, None self.next.cond.notify() ts = [T() for i in range(2)] for i, t in enumerate(ts): t.cond = threading.Condition(lock) t.baton = None t.next = ts[(i + 1) % len(ts)] t.start() with lock: ts[0].baton = True ts[0].cond.notify() while True: time.sleep(1) with lock: logging.warn("%s ops/s", ops) ops = 0
_______________________________________________ pypy-dev mailing list pypy-dev@python.org https://mail.python.org/mailman/listinfo/pypy-dev