コード例 #1
0
def wakeup_sleeper(handle):
    ec = core.get_ec()

    task = ec.uv_sleepers.pop(rffi.cast_ptr_to_adr(handle))
    ec.enqueue(task)

    uv.timer_stop(handle)
    uv.close(rffi.cast(uv.handle_ptr, handle), uv.free)
コード例 #2
0
def sleep_callback(duration, func):
    ec = core.get_ec()

    uv_sleeper = uv.malloc_bytes(uv.timer_ptr, uv.handle_size(uv.TIMER))
    ec.uv_sleepers[rffi.cast_ptr_to_adr(uv_sleeper)] = core.to_greenlet([func])
    uv.timer_init(ec.uv_loop, uv_sleeper)
    uv.timer_start(uv_sleeper, wakeup_sleeper, int(duration.number * 1000), 0)
    return space.null
コード例 #3
0
def sleep_greenlet(duration):
    ec = core.get_ec()
    if ec.current == ec.eventloop:
        raise space.OldError(u"bad context for greenlet sleep")
    assert ec.current.is_exhausted() == False

    uv_sleeper = uv.malloc_bytes(uv.timer_ptr, uv.handle_size(uv.TIMER))
    ec.uv_sleepers[rffi.cast_ptr_to_adr(uv_sleeper)] = ec.current
    uv.timer_init(ec.uv_loop, uv_sleeper)
    uv.timer_start(uv_sleeper, wakeup_sleeper, int(duration.number * 1000), 0)

    return core.switch([ec.eventloop])
コード例 #4
0
ファイル: uv_callback.py プロジェクト: gordol/lever
 def push_handle(table, handle, response):
     adr = rffi.cast_ptr_to_adr(handle)
     if adr in table:
         raise unwind(LError(u"libuv handle/request busy"))
     table[adr] = response
コード例 #5
0
ファイル: uv_callback.py プロジェクト: gordol/lever
 def pop_handle(table, handle):
     return table.pop(rffi.cast_ptr_to_adr(handle))
コード例 #6
0
ファイル: uv_callback.py プロジェクト: gordol/lever
def push(table, self):
    adr = rffi.cast_ptr_to_adr(self.handle)
    if adr in table:
        raise unwind(LError(u"libuv handle/request busy"))
    table[adr] = self
コード例 #7
0
ファイル: uv_callback.py プロジェクト: gordol/lever
def peek(table, handle):
    try:
        return table[rffi.cast_ptr_to_adr(handle)]
    except KeyError as e:
        raise unwind(LError(u"peek unable to find a handle"))
コード例 #8
0
ファイル: uv_callback.py プロジェクト: gordol/lever
def drop(table, handle):
    try:
        return table.pop(rffi.cast_ptr_to_adr(handle))
    except KeyError as e:
        raise unwind(LError(u"handle already dropped"))
コード例 #9
0
 def pop(self, handle):
     return self.table.pop(rffi.cast_ptr_to_adr(handle))
コード例 #10
0
 def push(self, handle, value):
     self.table[rffi.cast_ptr_to_adr(handle)] = value
コード例 #11
0
 def peek(self, handle):
     return self.table[rffi.cast_ptr_to_adr(handle)]