コード例 #1
0
ファイル: test_stackless.py プロジェクト: fhalde/pypy
    def test_schedule_callback(self):
        res = []
        cb = []

        def schedule_cb(prev, next):
            cb.append((prev, next))

        stackless.set_schedule_callback(schedule_cb)

        def f(i):
            res.append('A_%s' % i)
            stackless.schedule()
            res.append('B_%s' % i)

        t1 = stackless.tasklet(f)(1)
        t2 = stackless.tasklet(f)(2)
        maintask = stackless.getmain()
        stackless.run()
        assert res == ['A_1', 'A_2', 'B_1', 'B_2']
        assert len(cb) == 5
        assert cb[0] == (maintask, t1)
        assert cb[1] == (t1, t2)
        assert cb[2] == (t2, t1)
        assert cb[3] == (t1, t2)
        assert cb[4] == (t2, maintask)
コード例 #2
0
ファイル: test_defects.py プロジェクト: Snowgrass/stackless
 def testExceptionInScheduleCallback(self):
     stackless.set_schedule_callback(self.scheduleCallback)
     self.addCleanup(stackless.set_schedule_callback, None)
     stackless.tasklet(lambda: None)()
     with captured_stderr() as stderr:
         stackless.run()
     self.assertTrue("scheduleCallback" in stderr.getvalue())
コード例 #3
0
def _runServiceById(sid, proto_func):
    ftlog.info("run service:", sid)
    _initProtocol(sid, proto_func)
    stackless.set_schedule_callback(_tasklet_schedule_cb)
    if REACTOR_RUN_NORMAL:
        mainloop()
        return
    stackless.tasklet(mainloop)()
    stackless.run()
コード例 #4
0
 def testGetCallback(self):
     mon = SchedulingMonitor()
     self.assertIsNone(stackless.get_schedule_callback())
     old = stackless.set_schedule_callback(mon)
     self.assertIsNone(old)
     self.assertIs(stackless.get_schedule_callback(), mon)
     old = stackless.set_schedule_callback(None)
     self.assertIs(old, mon)
     self.assertIsNone(stackless.get_schedule_callback())
コード例 #5
0
ファイル: service.py プロジェクト: zhaozw/hall37
def _runServiceById(sid, proto_func):
    ftlog.info("run service:", sid)
    _initProtocol(sid, proto_func)
    stackless.set_schedule_callback(_tasklet_schedule_cb)
    if REACTOR_RUN_NORMAL:
        mainloop()
        return
    stackless.tasklet(mainloop)()
    stackless.run()
コード例 #6
0
 def testGetCallback(self):
     mon = SchedulingMonitor()
     self.assertIsNone(stackless.get_schedule_callback())
     old = stackless.set_schedule_callback(mon)
     self.assertIsNone(old)
     self.assertIs(stackless.get_schedule_callback(), mon)
     old = stackless.set_schedule_callback(None)
     self.assertIs(old, mon)
     self.assertIsNone(stackless.get_schedule_callback())
コード例 #7
0
    def test0(self):
        "Test #callbacks before and after running isolated monitor."

        mon1 = SchedulingMonitor()
        stackless.set_schedule_callback(mon1)
        stackless.tasklet(stackless.test_cframe)(3)
        stackless.tasklet(stackless.test_cframe)(3)
        # precondition
        self.failUnless(mon1.count == 0, "No callbacks before running")
        # running
        stackless.run()
        # postcondition
        self.failUnless(mon1.count >= 2 * 3,
                        "At least as may callbacks as many test_cframe calls")
コード例 #8
0
ファイル: test_sched_cb.py プロジェクト: Snowgrass/stackless
    def test0(self):
        "Test callbacks before and after running isolated monitor."

        mon1 = SchedulingMonitor()
        stackless.set_schedule_callback(mon1)
        stackless.tasklet(_teststackless.test_cframe)(3)
        stackless.tasklet(_teststackless.test_cframe)(3)
        # precondition
        self.assertEqual(mon1.count, 0, "No callbacks before running")
        # running
        stackless.run()
        # postcondition
        self.assertGreaterEqual(
            mon1.count, 2 * 3,
            "At least as may callbacks as many test_cframe calls")
コード例 #9
0
ファイル: mutex.py プロジェクト: Snowgrass/stackless
def main(debug=False):
    m = mutex()

    NamedTasklet(f, name="tick")(m)
    NamedTasklet(f, name="trick")(m)
    NamedTasklet(f, name="track")(m)

    if debug:
        stackless.set_channel_callback(channel_cb)
        stackless.set_schedule_callback(schedule_cb)

    stackless.run()

    stackless.set_channel_callback(None)
    stackless.set_schedule_callback(None)
コード例 #10
0
def patch_stackless():
    '''
    This function should be called to patch the stackless module so that new tasklets are properly tracked in the
    debugger.
    '''
    global _application_set_schedule_callback
    _application_set_schedule_callback = stackless.set_schedule_callback(_schedule_callback)

    def set_schedule_callback(callable):
        global _application_set_schedule_callback
        old = _application_set_schedule_callback
        _application_set_schedule_callback = callable
        return old

    def get_schedule_callback():
        global _application_set_schedule_callback
        return _application_set_schedule_callback

    set_schedule_callback.__doc__ = stackless.set_schedule_callback.__doc__
    if hasattr(stackless, "get_schedule_callback"):
        get_schedule_callback.__doc__ = stackless.get_schedule_callback.__doc__
    stackless.set_schedule_callback = set_schedule_callback
    stackless.get_schedule_callback = get_schedule_callback

    if not hasattr(stackless.tasklet, "trace_function"):
        # Older versions of Stackless, released before 2014
        __call__.__doc__ = stackless.tasklet.__call__.__doc__
        stackless.tasklet.__call__ = __call__

        setup.__doc__ = stackless.tasklet.setup.__doc__
        stackless.tasklet.setup = setup

        run.__doc__ = stackless.run.__doc__
        stackless.run = run
コード例 #11
0
ファイル: pydevd_stackless.py プロジェクト: andrewgu12/config
def patch_stackless():
    '''
    This function should be called to patch the stackless module so that new tasklets are properly tracked in the
    debugger.
    '''
    global _application_set_schedule_callback
    _application_set_schedule_callback = stackless.set_schedule_callback(_schedule_callback)

    def set_schedule_callback(callable):
        global _application_set_schedule_callback
        old = _application_set_schedule_callback
        _application_set_schedule_callback = callable
        return old

    def get_schedule_callback():
        global _application_set_schedule_callback
        return _application_set_schedule_callback

    set_schedule_callback.__doc__ = stackless.set_schedule_callback.__doc__
    if hasattr(stackless, "get_schedule_callback"):
        get_schedule_callback.__doc__ = stackless.get_schedule_callback.__doc__
    stackless.set_schedule_callback = set_schedule_callback
    stackless.get_schedule_callback = get_schedule_callback

    if not hasattr(stackless.tasklet, "trace_function"):
        # Older versions of Stackless, released before 2014
        __call__.__doc__ = stackless.tasklet.__call__.__doc__
        stackless.tasklet.__call__ = __call__

        setup.__doc__ = stackless.tasklet.setup.__doc__
        stackless.tasklet.setup = setup

        run.__doc__ = stackless.run.__doc__
        stackless.run = run
コード例 #12
0
    def test0(self):
        "Test #callbacks before and after running isolated monitor."

        mon1 = SchedulingMonitor()
        stackless.set_schedule_callback(mon1)
        stackless.tasklet(stackless.test_cframe)(3)
        stackless.tasklet(stackless.test_cframe)(3)
        # precondition
        self.assertEqual(mon1.count, 0,
            "No callbacks before running")
        # running
        stackless.run()
        # postcondition
        self.assertGreaterEqual(
            mon1.count, 2*3,
            "At least as may callbacks as many test_cframe calls")
コード例 #13
0
    def testTracing(self):
        t1 = stackless.tasklet(self.f)()
        t2 = stackless.tasklet(self.f)()
        t3 = stackless.tasklet(self.f)()

        self.setup_seen((t1, t2, t3),
                        (self.f, self.foo, mutex.lock, mutex.unlock))
        stackless.set_schedule_callback(self.schedule_cb)

        stackless.run()
        stackless.set_schedule_callback(None)

        seen = len([c for c in self.seen.itervalues() if c > 0])
        self.assertListEqual(self.schedule_callback_exc, [])
        self.assertListEqual(self.unexpected_trace_events, [])
        # We won't see every line, because of if/else, try/except, comments, ...
        # But we should see about 80%
        self.assertGreater(float(seen) / len(self.seen), 0.75)
コード例 #14
0
def patch_stackless():
    '''
    This function should be called to patch the stackless module so that new tasklets are properly tracked in the 
    debugger.
    '''
    stackless.set_schedule_callback(_schedule_callback)
    def set_schedule_callback(callable):
        global _application_set_schedule_callback
        _application_set_schedule_callback = callable
    
    set_schedule_callback.__doc__ = stackless.set_schedule_callback.__doc__
    stackless.set_schedule_callback = set_schedule_callback
        
    __call__.__doc__ = stackless.tasklet.__call__.__doc__
    stackless.tasklet.__call__ = __call__
        
    run.__doc__ = stackless.run.__doc__
    stackless.run = run
コード例 #15
0
    def testTracing(self):
        t1 = stackless.tasklet(self.f)()
        t2 = stackless.tasklet(self.f)()
        t3 = stackless.tasklet(self.f)()

        self.setup_seen((t1, t2, t3),
                        (self.f, self.foo, mutex.lock, mutex.unlock))
        stackless.set_schedule_callback(self.schedule_cb)

        stackless.run()
        stackless.set_schedule_callback(None)

        seen = len([c for c in self.seen.itervalues() if c > 0])
        self.assertListEqual(self.schedule_callback_exc, [])
        self.assertListEqual(self.unexpected_trace_events, [])
        # We won't see every line, because of if/else, try/except, comments, ...
        # But we should see about 80%
        self.assertGreater(float(seen) / len(self.seen), 0.75)
コード例 #16
0
def patch_stackless():
    '''
    This function should be called to patch the stackless module so that new tasklets are properly tracked in the 
    debugger.
    '''
    stackless.set_schedule_callback(_schedule_callback)

    def set_schedule_callback(callable):
        global _application_set_schedule_callback
        _application_set_schedule_callback = callable

    set_schedule_callback.__doc__ = stackless.set_schedule_callback.__doc__
    stackless.set_schedule_callback = set_schedule_callback

    __call__.__doc__ = stackless.tasklet.__call__.__doc__
    stackless.tasklet.__call__ = __call__

    run.__doc__ = stackless.run.__doc__
    stackless.run = run
コード例 #17
0
    def test1(self):
        "Test multiple monitors, from test/test_set_schedule_callback.py"

        fu = self.assertTrue
        n = 2

        mon1 = SchedulingMonitor()
        stackless.set_schedule_callback(mon1)
        v = 3
        for i in range(n): stackless.tasklet(stackless.test_cframe)(v)
        c1 = mon1.count
        fu(c1 == 0, "No callbacks before running")
        stackless.run()
        c1 = mon1.count
        fu(c1 >= n*v, "At least as may callbacks as many test_cframe calls")

        mon2 = SchedulingMonitor()
        stackless.set_schedule_callback(mon2)
        v = 5
        for i in range(n): stackless.tasklet(stackless.test_cframe)(v)
        stackless.run()
        c2 = mon2.count
        fu(c2 >= n*v, "At least as may callbacks as many test_cframe calls")
        fu(mon1.count == c1, "No calls to previous callback")
        fu(c2 > c1, "More test_cframe calls => more callbacks on second run")

        stackless.set_schedule_callback(None)
        v = 7
        for i in range(n): stackless.tasklet(stackless.test_cframe)(v)
        stackless.run()
        c1p = mon1.count
        c2p = mon2.count
        fu(c1p == c1, "No calls to previous callback after setting it to None")
        fu(c2p == c2, "No calls to previous callback after setting it to None")
コード例 #18
0
    def test1(self):
        "Test multiple monitors, from test/test_set_schedule_callback.py"

        fu = self.assertTrue
        n = 2

        mon1 = SchedulingMonitor()
        stackless.set_schedule_callback(mon1)
        v = 3
        for i in range(n): stackless.tasklet(stackless.test_cframe)(v)
        c1 = mon1.count
        fu(c1 == 0, "No callbacks before running")
        stackless.run()
        c1 = mon1.count
        fu(c1 >= n*v, "At least as may callbacks as many test_cframe calls")

        mon2 = SchedulingMonitor()
        stackless.set_schedule_callback(mon2)
        v = 5
        for i in range(n): stackless.tasklet(stackless.test_cframe)(v)
        stackless.run()
        c2 = mon2.count
        fu(c2 >= n*v, "At least as may callbacks as many test_cframe calls")
        fu(mon1.count == c1, "No calls to previous callback")
        fu(c2 > c1, "More test_cframe calls => more callbacks on second run")

        stackless.set_schedule_callback(None)
        v = 7
        for i in range(n): stackless.tasklet(stackless.test_cframe)(v)
        stackless.run()
        c1p = mon1.count
        c2p = mon2.count
        fu(c1p == c1, "No calls to previous callback after setting it to None")
        fu(c2p == c2, "No calls to previous callback after setting it to None")
コード例 #19
0
ファイル: schedule.py プロジェクト: konas/twless
def _initialize():
    if _ModuelState.Inited:
        return
    _ModuelState.Inited = 1

    # log.startLogging(sys.stdout)

    if hasattr(stackless, 'get_schedule_callback'):
        precb = stackless.get_schedule_callback()
    elif hasattr(stackless, '_schedule_callback'):
        precb = stackless._schedule_callback
    else:
        precb = None

    stackless.set_schedule_callback(SchedulingCallback(precb))
    curTasklet = stackless.getcurrent()
    if isinstance(curTasklet, UsrTasklet):
        TaskletMetrics.curUsrTasklet = curTasklet
        TaskletMetrics.curUsrTaskletContext = curTasklet.context
    else:
        TaskletMetrics.curUsrTasklet = None
        TaskletMetrics.curUsrTaskletContext = None
コード例 #20
0
ファイル: test_stackless.py プロジェクト: Qointum/pypy
    def test_schedule_callback(self):
        res = []
        cb = []
        def schedule_cb(prev, next):
            cb.append((prev, next))

        stackless.set_schedule_callback(schedule_cb)
        def f(i):
            res.append('A_%s' % i)
            stackless.schedule()
            res.append('B_%s' % i)

        t1 = stackless.tasklet(f)(1)
        t2 = stackless.tasklet(f)(2)
        maintask = stackless.getmain()
        stackless.run()
        assert res == ['A_1', 'A_2', 'B_1', 'B_2']
        assert len(cb) == 5
        assert cb[0] == (maintask, t1)
        assert cb[1] == (t1, t2)
        assert cb[2] == (t2, t1)
        assert cb[3] == (t1, t2)
        assert cb[4] == (t2, maintask)
コード例 #21
0
 def __initSharedMem(self):
     self.__jobs_shm = create_shm("wfe-jobs", 524288)
     self.__currentjob_shm = create_shm("wfe-current-job", 524288)
     stackless.set_schedule_callback(self.__scheduleHandler)
     self.__writeJobsToShm()
コード例 #22
0
    def test2currentWithPrevAndNext(self):
        class Ex_Main(Exception):
            name = 'call_run'

        class Ex_A(Exception):
            name = 'task_a'

        def call_run():
            try:
                raise Ex_Main()
            except Exception:
                stackless.run()

        def task_a():
            try:
                raise Ex_A()
            except Exception:
                stackless.schedule()

        tasklet_a = stackless.tasklet(task_a)()
        tasklet_main = stackless.current
        #print "Tasklet a: %r" % (tasklet_a,)
        #print "Tasklet main: %r" % (tasklet_main,)

        switches = []

        def cb(prev, next):
            # find the real current according to the information in the frame stack
            ex = sys.exc_info()
            f = sys._getframe()
            current = stackless.current

            while f is not None:
                if f.f_code in (call_run.func_code, task_a.func_code):
                    name = f.f_code.co_name
                    break
                f = f.f_back
            else:
                # Can't deduce the current tasklet from the stack
                name = None
                #print "Unexpected stack: current %r, prev %r, next %r" % (current, prev, next)
                #traceback.print_stack(file=sys.stdout)

            if current is tasklet_main:
                current_name = 'call_run'
            elif current is tasklet_a:
                current_name = 'task_a'
            else:
                print "Unexpected tasklet: current %r, prev %r, next %r" % (
                    current, prev, next)
                traceback.print_stack(file=sys.stdout)
                current_name = None

            switches.append((name, ex[0], current_name))

        stackless.set_schedule_callback(cb)
        call_run()
        stackless.set_schedule_callback(None)
        for real_name, ex, current_name in switches:
            if real_name:
                self.assertEquals(real_name, current_name)
            if ex:
                self.assertEquals(ex.name, current_name)
コード例 #23
0
 def testExceptionInScheduleCallback(self):
     stackless.set_schedule_callback(self.scheduleCallback)
     self.addCleanup(stackless.set_schedule_callback, None)
     stackless.tasklet(lambda:None)()
     stackless.run()
コード例 #24
0
    def test2currentWithPrevAndNext(self):
        class Ex_Main(Exception):
            name = 'call_run'

        class Ex_A(Exception):
            name = 'task_a'

        def call_run():
            try:
                raise Ex_Main()
            except Exception:
                stackless.run()

        def task_a():
            try:
                raise Ex_A()
            except Exception:
                stackless.schedule()

        tasklet_a = stackless.tasklet(task_a)()
        tasklet_main = stackless.current
        #print "Tasklet a: %r" % (tasklet_a,)
        #print "Tasklet main: %r" % (tasklet_main,)

        switches = []

        def cb(prev, next):
            # find the real current according to the information in the frame stack
            ex = sys.exc_info()
            f = sys._getframe()
            current = stackless.current

            while f is not None:
                if f.f_code in (call_run.func_code, task_a.func_code):
                    name = f.f_code.co_name
                    break
                f = f.f_back
            else:
                # Can't deduce the current tasklet from the stack
                name = None
                #print "Unexpected stack: current %r, prev %r, next %r" % (current, prev, next)
                #traceback.print_stack(file=sys.stdout)

            if current is tasklet_main:
                current_name = 'call_run'
            elif current is tasklet_a:
                current_name = 'task_a'
            else:
                print "Unexpected tasklet: current %r, prev %r, next %r" % (current, prev, next)
                traceback.print_stack(file=sys.stdout)
                current_name = None

            switches.append((name, ex[0], current_name))

        stackless.set_schedule_callback(cb)
        call_run()
        stackless.set_schedule_callback(None)
        for real_name, ex, current_name in switches:
            if real_name:
                self.assertEquals(real_name, current_name)
            if ex:
                self.assertEquals(ex.name, current_name)
コード例 #25
0
import stackless


class CallCounter:
    def __init__(self):
        self.count = 0

    def __call__(self, prev, next):
        self.count += 1
        #print "callback %s" % self.count


callback1 = CallCounter()
stackless.set_schedule_callback(callback1)
stackless.tasklet(stackless.test_cframe)(3)
stackless.tasklet(stackless.test_cframe)(3)
assert callback1.count == 0, "No callbacks before run"
stackless.run()
count1 = callback1.count
assert count1 >= 2 * 3, "At least as may callbacks as many test_cframe calls"

callback2 = CallCounter()
stackless.set_schedule_callback(callback2)
stackless.tasklet(stackless.test_cframe)(5)
stackless.tasklet(stackless.test_cframe)(5)
stackless.run()
count2 = callback2.count
assert count2 >= 2 * 5, "At least as may callbacks as many test_cframe calls"
assert callback1.count == count1, "No calls to previous callback"
assert count2 > count1, "More test_cframe calls => more callbacks on second run"
コード例 #26
0
import stackless

class CallCounter:
	def __init__(self):
		self.count = 0
	def __call__(self, prev, next):
		self.count += 1
		#print "callback %s" % self.count


callback1 = CallCounter()
stackless.set_schedule_callback(callback1)
stackless.tasklet(stackless.test_cframe)(3)
stackless.tasklet(stackless.test_cframe)(3)
assert callback1.count==0, "No callbacks before run"
stackless.run()
count1 = callback1.count
assert count1>= 2*3, "At least as may callbacks as many test_cframe calls"

callback2 = CallCounter()
stackless.set_schedule_callback(callback2)
stackless.tasklet(stackless.test_cframe)(5)
stackless.tasklet(stackless.test_cframe)(5)
stackless.run()
count2 = callback2.count
assert count2>=2*5, "At least as may callbacks as many test_cframe calls"
assert callback1.count==count1, "No calls to previous callback"
assert count2>count1, "More test_cframe calls => more callbacks on second run"

stackless.set_schedule_callback(None)
stackless.tasklet(stackless.test_cframe)(7)
コード例 #27
0
ファイル: tracing.py プロジェクト: Snowgrass/stackless
            # Set the "global" trace function for the tasklet
            next.trace_function = tf
            # Set the "local" trace function for each frame
            # This is required, if the tasklet is already running
            frame = next.frame
            if frame is current_frame:
                frame = frame.f_back
            while frame is not None:
                frame.f_trace = tf
                frame = frame.f_back
    except:
        traceback.print_exc()
    finally:
        sys.settrace(current_tf)

if __name__ == "__main__":
    if len(sys.argv) > 1 and sys.argv[1] == 'hard':
        stackless.enable_softswitch(False)

    stackless.set_channel_callback(channel_cb)
    stackless.set_schedule_callback(schedule_cb)

    NamedTasklet(task, "tick")()
    NamedTasklet(task, "trick")()
    NamedTasklet(task, "track")()

    stackless.run()

    stackless.set_channel_callback(None)
    stackless.set_schedule_callback(None)
コード例 #28
0
ファイル: support.py プロジェクト: Snowgrass/stackless
 def trace_tasklet_switches(self):
     old_scb = stackless.get_schedule_callback()
     switch_recorder = SwitchRecorder(old_scb)
     self.addCleanup(stackless.set_schedule_callback, old_scb)
     self.addCleanup(switch_recorder.print)
     stackless.set_schedule_callback(switch_recorder)
コード例 #29
0
 def testExceptionInScheduleCallback(self):
     stackless.set_schedule_callback(self.scheduleCallback)
     self.addCleanup(stackless.set_schedule_callback, None)
     stackless.tasklet(lambda: None)()
     stackless.run()