温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python中怎么搭建多线程环境

发布时间:2021-07-19 16:14:39 来源:亿速云 阅读:169 作者:Leah 栏目:编程语言

Python中怎么搭建多线程环境,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

Python的thread module所提供的接口中,一定不能少的肯定是创建线程的接口,倘若没有这个接口,生活还有什么意义呢J?在上面的thread1.py中,我们正是通过其提供的start_new_thread创建了一个崭新的线程。好,我们就进入这个start_new_ thread,看看Python是如何进行创世纪的工作的。

[threadmodule.c]   static PyObject* thread_PyThread_start_new_thread(PyObject *self, PyObject     *fargs)   {       PyObject *func, *args, *keyw = NULL;       struct bootstate *boot;       long ident;       PyArg_UnpackTuple(fargs, "start_new_thread", 2, 3, &func, &args,         &keyw);       //[1]:创建bootstate结构       boot = PyMem_NEW(struct bootstate, 1);       boot->interp = PyThreadState_GET()->interp;       boot->funcfunc = func;       boot->argsargs = args;       boot->keywkeyw = keyw;       //[2]:初始化多线程环境       PyEval_InitThreads(); /* Start the interpreter's thread-awareness */       //[3]:创建线程       ident = PyThread_start_new_thread(t_bootstrap, (void*) boot);       return PyInt_FromLong(ident);   }

代码清单15-1的[1]、[2]和[3]分别有如下含义:

[1]  创建并初始化bootstate结构boot,在boot中,将保存关于线程的一切信息,如:线程过程,线程过程的参数等。

[2]  初始化Python多线程环境

[3]  以boot为参数,创建操作系统的原生线程。

在代码清单15-1的[1]中,我们注意到boot->interp中保存了Python的PyInter- preterState对象,这个对象中携带了Python的module pool这样的全局信息,Python中所有的thread都会共享这些全局信息。关于代码清单15-1的[2]处所示的多线程环境的初始化动作,有一点需要特别说明,当Python启动时,是并不支持多线程的。

换句话说,Python中支持多线程的数据结构以及GIL都是没有创建的,Python之所以有这种行为是因为大多数的Python程序都不需要多线程的支持。假如一个简单地统计词频的Python脚本中居然出现了多线程,面对这样的代码,我们一定都会抓狂的J。

对多线程的支持并非是没有代价的,最简单的一点,如果激活多线程机制,而执行的Python程序中并没有多线程,那么在100条指令之后,Python虚拟机同样会激活线程的调度。而如果不激活多线程,Python多线程环境虚拟机则不用做这些无用功。所以Python选择了让用户激活多线程机制的策略。在Python虚拟机启动时。

多线程机制并没有被激活,它只支持单线程,一旦用户调用thread.start_new_thread,明确指示Python虚拟机创建新的线程。Python就能意识到用户需要多线程的支持,这个时候,Python多线程环境会自动建立多线程机制需要的数据结构、环境以及那个至关重要的GIL。

看完上述内容,你们掌握Python中怎么搭建多线程环境的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI