summaryrefslogtreecommitdiff
path: root/docs/examples/userguide/fusedtypes/conditional_gil.pyx
diff options
context:
space:
mode:
Diffstat (limited to 'docs/examples/userguide/fusedtypes/conditional_gil.pyx')
-rw-r--r--docs/examples/userguide/fusedtypes/conditional_gil.pyx15
1 files changed, 15 insertions, 0 deletions
diff --git a/docs/examples/userguide/fusedtypes/conditional_gil.pyx b/docs/examples/userguide/fusedtypes/conditional_gil.pyx
new file mode 100644
index 000000000..473132f2e
--- /dev/null
+++ b/docs/examples/userguide/fusedtypes/conditional_gil.pyx
@@ -0,0 +1,15 @@
+cimport cython
+
+ctypedef fused double_or_object:
+ double
+ object
+
+def increment(double_or_object x):
+ with nogil(double_or_object is not object):
+ # Same code handles both cython.double (GIL is released)
+ # and python object (GIL is not released).
+ x = x + 1
+ return x
+
+increment(5.0) # GIL is released during increment
+increment(5) # GIL is acquired during increment