栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python中的线程处理

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python中的线程处理

为了增加复杂度:

使用穿线模块

优点:

  • 在自己的线程中运行任何函数(实际上是任何可调用的)真的很容易。
  • 共享数据不是一件容易的事(锁从不容易:),至少很简单。

缺点:

  • 正如Juergen所提到的, Python线程实际上不能并发访问解释器中的状态(有一个大锁,臭名昭著的Global Interpreter Lock。)实际上,这意味着线程对于I / O绑定任务(网络,写入磁盘,等等),但对于并发计算根本没有用。

使用多重处理模块

在简单的用例中,

threading
除了每个任务都是在自己的进程而不是自己的线程中运行之外,这与使用完全一样。(几乎从字面上看:如果您以Eli的示例为例,并
threading
multiprocessing
,,替换
Thread
Process
,并且
Queue
(模块)替换为
multiprocessing.Queue
,则应该可以正常运行。)

优点:

  • 所有任务的实际并发(无全局解释器锁定)。
  • 可以扩展到多个处理器,甚至可以扩展到多 台机器

缺点:

  • 进程比线程慢。
  • 进程之间的数据共享比线程复杂。
  • 内存不是隐式共享的。您要么必须明确共享它,要么必须腌制变量并将其来回发送。这更安全,但更困难。(如果越来越重要,Python开发人员似乎正在朝这个方向努力。)

使用事件模型,例如Twisted

优点:

  • 您可以很好地控制优先级,执行时间。

缺点:

  • 即使有了一个好的库,异步编程通常也比线程编程难,无论是在理解应该发生的事情还是在调试实际发生的事情上都很难。

所有
情况下,我假设您已经了解了多任务处理中的许多问题,尤其是如何在任务之间共享数据的棘手问题。如果由于某种原因您不知道何时以及如何使用锁和条件,则必须从这些开始。多任务代码充满了微妙之处和技巧,在开始之前最好对概念有一个很好的了解。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/625960.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号