当前位置: 首页 > news >正文

网站建设宣传海报369网站建设

网站建设宣传海报,369网站建设,企业网站的在线推广方法有哪些,哪个网站可以做鞋鉴定问题 你已经听说过全局解释器锁 GIL#xff0c;担心它会影响到多线程程序的执行性能。 解决方案 尽管 Python 完全支持多线程编程#xff0c;但是解释器的 C 语言实现部分在完全并行执行时并不是线程安全的。 实际上#xff0c;解释器被一个全局解释器锁保护着#xff…问题 你已经听说过全局解释器锁 GIL担心它会影响到多线程程序的执行性能。 解决方案 尽管 Python 完全支持多线程编程但是解释器的 C 语言实现部分在完全并行执行时并不是线程安全的。 实际上解释器被一个全局解释器锁保护着它确保任何时候 都只有一个 Python 线程执行。 GIL 最大的问题就是 Python 的多线程程序并不能利用 多核 CPU 的优势比如一个使用了多个线程的计算密集型程序只会在一个单 CPU 上 面运行。 在讨论普通的 GIL 之前有一点要强调的是 GIL 只会影响到那些严重依赖 CPU 的程序比如计算型的。 如果你的程序大部分只会涉及到 I/O比如网络交互那么 使用多线程就很合适因为它们大部分时间都在等待。 实际上你完全可以放心的创建 几千个 Python 线程现代操作系统运行这么多线程没有任何压力没啥可担心的。 而对于依赖 CPU 的程序你需要弄清楚执行计算的特点。 例如优化底层算法 要比使用多线程运行快得多。类似的由于 Python 是解释执行的如果你将那些性能 瓶颈代码移到一个 C 语言扩展模块中速度也会提升的很快。 如果你要操作数组那 么使用 NumPy 这样的扩展会非常的高效。 还有一点要注意的是线程不是专门用来优化性能的。一个 CPU 依赖型程序可能 会使用线程来管理一个图形用户界面、一个网络连接或其他服务。这时候GIL 会产生 一些问题因为如果一个线程长期持有 GIL 的话会导致其他非 CPU 型线程一直等待。 事实上一个写的不好的 C 语言扩展会导致这个问题更加严重尽管代码的计算部分 会比之前运行的更快些。 说了这么多现在想说的是我们有两种策略来解决 GIL 的缺点。 首先如果你完 全工作于 Python 环境中你可以使用 multiprocessing 模块来创建一个进程池并像协同处理器一样的使用。 例如你有如下的线程代码 #执行大型计算(CPU限制) def some_work(args): ...return result调用上述函数的线程 def some_thread():while True:...r some_work(args)...修改代码使用进程池 pool None #执行大型计算(CPU限制) def some_work(args):return result调用上述函数的线程 def some_thread():while True:r pool.apply(some_work, (args))线程池 if __name__ __main__:import multiprocessingpool multiprocessing.Pool()这个通过使用一个技巧利用进程池解决了 GIL 的问题。 当一个线程想要执行 CPU 密集型工作时会将任务发给进程池。然后进程池会在另外一个进程中启动一个单独的 Python 解释器来工作。当线程等待结果的时候会释放 GIL。 并且由于计算任务在单 独解释器中执行那么就不会受限于 GIL 了。在一个多核系统上面你会发现这个技术可以让你很好的利用多 CPU 的优势。 另外一个解决 GIL 的策略是使用 C 扩展编程技术。 主要思想是将计算密集型任务转移给 C跟 Python 独立在工作的时候在 C 代码中释放 GIL。 这可以通过在 C 代码中插入下面这串代码来完成 #include Python.h ... PyObject *pyfunc(PyObject *self, PyObject *args) { ... Py_BEGIN_ALLOW_THREADS ... Py_END_ALLOW_THREADS ... }结论 作为一个真实的例子在多线程的网络编程中神秘 的 stalls 可能是因为其他原因比如一个 DNS 查找延时而跟 GIL 毫无关系。 最后你需要先去搞懂你的代码是否真的被 GIL 影响到。 同时还要明白 GIL 大部分都应该 只关注 CPU 的处理而不是 I/O.如果你准备使用一个处理器池注意的是这样做涉及到数据序列化和在不同 Python 解释器通信。 被执行的操作需要放在一个通过 def 语句定义的 Python 函数中 不能是 lambda、闭包可调用实例等并且函数参数和返回值必须要兼容 pickle。 C 扩展最重要的特征是它们和 Python 解释器是保持独立的。也就是说如果你准 备将 Python 中的任务分配到 C 中去执行你需要确保 C 代码的操作跟 Python 保持独立这就意味着不要使用 Python 数据结构以及不要调用 Python 的 C API。 也就是说 C 扩展担负起 了大量的计算任务而不是少数几个计算。
http://www.tj-hxxt.cn/news/225481.html

相关文章:

  • 网站设计论文的摘要自己做的相册网站
  • 个人网站备案类型淘宝客网站可以做百度推广
  • 如何招网站开发人员搜狗推广后台登录
  • 苏州住房建设局网站html做电子书网站
  • 免费个人网站自助建设企业主页制作方法
  • 网站开发新闻怎么写ppt万能模板免费下载
  • 创建个人网站的流程广州网络营销公司排名
  • 如何做解析网站wordpress菜单如何做
  • 北京平台网站建设哪里好手机网站打开很慢
  • 专门做app的原型网站家在深圳歌词
  • 固安做网站什么网站做的最好
  • 网站模板用什么软件做宣传册设计与制作模板免费
  • 潍坊公司注册网站建筑行业网站有哪些
  • 定制型网站制作哪家好广告设计需要什么学历
  • 朝阳企业网站建设方案省厅建设信息网网站
  • 做一张简单的app网站多钱手机网站常用代码
  • 高清logo网站网站维护建设招标
  • 坑梓网站建设咨询广州市 优化推广
  • 网站架构的优化涡阳哪里有做网站的
  • 网站开发周期定义郑州网站建设微信小程序
  • iis 新建网站 要登录物流网站哪个好
  • 东兴网站建设做网站项目前怎么收集需求
  • wordpress喜欢seo引擎优化专员
  • 自适应网站系统吗php网站 mysql数据库配置文件
  • 做网站群的公司一键建站哪家信誉好
  • 百度搜索不到自己的网站做网页公司
  • 河南省建设工程标准定额管理网站做化妆品销售网站如何
  • 肥东网站建设要给公司做一个网站怎么做的吗
  • 如何破解网站管理员登陆密码做蛋糕哪个教程网站好
  • 潍坊关键词优化平台网站seo入门