Are PyCLIPS functions blocking?

Yes, definitely. The underlying CLIPS engine has to be treated as a single resource - although it can handle multiple separate environments - thus "real" concurrent access is not possible. Multiple threads can use the resource, but they are implicitly blocked by the Python interpreter itself when they try to access the PyCLIPS low-level layer. As a side effect, also the Run() function could cause a Python program to release control to the interpreter after a long time. It wouldn't be safe to reimplement PyCLIPS in a way that allows the Python interpreter to access the engine while a time-consuming function (such as the Run() function) is executing, as CLIPS has not been designed for multithreading. However if your problem is the lack of responsiveness specifically during a Run() you can refer to the second "Answered Question" above for a *partial* solution.