55 lines
1.4 KiB
Cython
55 lines
1.4 KiB
Cython
cimport cython
|
|
|
|
from gevent.__hub_local cimport get_hub_noargs as get_hub
|
|
cdef Timeout
|
|
|
|
cdef bint _greenlet_imported
|
|
|
|
cdef extern from "greenlet/greenlet.h":
|
|
|
|
ctypedef class greenlet.greenlet [object PyGreenlet]:
|
|
pass
|
|
|
|
# These are actually macros and so much be included
|
|
# (defined) in each .pxd, as are the two functions
|
|
# that call them.
|
|
greenlet PyGreenlet_GetCurrent()
|
|
void PyGreenlet_Import()
|
|
|
|
cdef inline greenlet getcurrent():
|
|
return PyGreenlet_GetCurrent()
|
|
|
|
cdef inline void greenlet_init():
|
|
global _greenlet_imported
|
|
if not _greenlet_imported:
|
|
PyGreenlet_Import()
|
|
_greenlet_imported = True
|
|
|
|
|
|
cdef void _init()
|
|
|
|
|
|
cdef class Semaphore:
|
|
cdef public int counter
|
|
cdef readonly list _links
|
|
cdef readonly object _notifier
|
|
cdef public int _dirty
|
|
cdef object __weakref__
|
|
|
|
cpdef bint locked(self)
|
|
cpdef int release(self) except -1000
|
|
cpdef rawlink(self, object callback)
|
|
cpdef unlink(self, object callback)
|
|
cpdef _start_notify(self)
|
|
cpdef _notify_links(self)
|
|
cdef _do_wait(self, object timeout)
|
|
cpdef int wait(self, object timeout=*) except -1000
|
|
cpdef bint acquire(self, int blocking=*, object timeout=*) except -1000
|
|
cpdef __enter__(self)
|
|
cpdef __exit__(self, object t, object v, object tb)
|
|
|
|
cdef class BoundedSemaphore(Semaphore):
|
|
cdef readonly int _initial_value
|
|
|
|
cpdef int release(self) except -1000
|