diff options
Diffstat (limited to 'python/gevent/__semaphore.pxd')
-rw-r--r-- | python/gevent/__semaphore.pxd | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/python/gevent/__semaphore.pxd b/python/gevent/__semaphore.pxd new file mode 100644 index 0000000..5c8ecf1 --- /dev/null +++ b/python/gevent/__semaphore.pxd @@ -0,0 +1,54 @@ +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 |