我有一个非常具体的需求:我想创建一个带有 Qt Widget 的 python 控制台,并且能够拥有多个独立的解释器。现在让我尝试解释我的问题在哪里以及我所做的所有尝试,按照我最想对那些我可以默认使用的人进行排序
第一点是 Python C API (PyRun[...], PyEval[...] ...) 中的所有函数都需要 GIL 锁定,这禁止 C 的任何并发代码解释(否则我真的会很高兴错了!!!:D)
因此,我尝试了另一种方法,而不是“通常的方法”:我在 python 中创建了一个循环,在我的特殊文件上调用 read() 并评估结果。此函数(作为内置扩展实现)阻塞,直到有数据要读取。(实际上,它目前是 C 代码中的一段时间,而不是基于 pthread 的条件)然后,使用 PyRun_simpleString(),我在另一个线程中启动我的循环。这就是问题所在:我的读取函数,除了阻塞当前线程(这是完全正常的)之外,它阻塞了整个解释器,并且 PyRun_simpleString() 不返回......
最后,我有最后一个想法可能会相对较慢:在 C++ 中有一个专用线程来运行解释器,并在 python 中做所有事情来管理输入/输出。这可能是一个循环,当存在需要执行命令的控制台时创建作业。似乎不是很难做到,但我更喜欢问你:有没有办法使上述可能性发挥作用,或者有没有另一种我没有想到的方法,或者我的最后一个想法是最好的?