I have some python code which is heavily dependent on greenlets.  I can use either gevent or eventlet.
I have packaged some sections of the code in a C-extension but these calls do not yield to other greenlets.  Is it possible to write my extension such that it will yield control to other python threads while it does not require the GIL?
You can use normal PyObject_CallFunction(eventlet/greenlet.sleep) to yield control to other green threads. It must be run with GIL locked, like any other Python code.
You can not run Python code without GIL. (you can but it will quickly go sideways and corrupt memory).
Make C-Extension calls "green" in python