怎样在一个进程的不同线程里开不同的python解释器

【怎样在一个进程的不同线程里开不同的python解释器】 Python的确有一个接口可以创建新的解释器( Py_NewInterpreter),然而这个接口仍然受GIL的控制,所以我觉得你的思路应该是不可行的。另外,虽然官方说新建的解释器 almost separate,但你很难判断到底哪些内容是不separate的。我的意见是,你与其去踩这个大坑,不如老老实实用多进程的模型去实现,再说多进程之间传递数据也没有复杂到哪里去。

■网友
你想要做的事情等价于 “打造一个无 GIL 的 Python 解释器”。
所以首先你需要做完第一步,写出来一个去除掉 GIL 的 Python 解释器,然后就可以实现你想要的效果了。
否则,不可能!

■网友
如果你想用python写代码,那么计算部分就无法并行,gil是绕不开的。一般是主程序用python,计算密集部分用cython实现,实际上就是c++,并行计算完毕后返还结果给python。总结一下就是,计算密集的程序用c++,c#,java内存密集的程序用c++那么python能干啥?他可以做i/o密集的,比如dropbox。至于大型项目python一般做个前端接口。如果你有钱,你可以买带spark的服务器,代码用python,随便你并行,但是需要购买很多台电脑哟。
■网友
如果是用 CPython 的话,不用继续深入考虑了,因为 CPython 实现中,会有大量的全局变量,在同一个进程内,就算有办法开多实例,这些全局变量指向的也是相同的内存区域,导致多个 CPython 没有办法同时地正确运行。
不过有很多语言的实现,是可以像你想的这样,可以在一个进程内创建多个实例的。比较著名的就是 lua,需要自己的代码创建一个 state 的结构体,所有类似 CPython 的全局变量,都会挂在上面。其他类似实现的有 mruby,原理一样。

■网友
请问楼主对这个问题的调研怎么样了?我这边也遇到同样的问题,和你同样的想法,因为有大量的词典文件数据,所以不大方便使用多进程方式,想到的解决方法和你的想法一样,不知道可行否?
或者是否可以使用c++不同进程之间的共享内存,这样可以在不同的进程之间只加载一份词典(多个词典文件,文件若干个G)而多个进程使用同一块共享内存,这样既可以在不同进程中使用不同的GIL,也可以避免占用过多内存?


    推荐阅读