Python线程,排队,异步......这一切意味着什么?

时间:2010-11-09 09:33:55

标签: python multithreading asynchronous multiprocessing

我最近在Python中尝试过线程,并且很想知道什么时候使用。

例如,我应该何时在多处理上使用多线程?当我应该使用异步IO而不是线程时会出现什么情况?

我大多理解每个人的所作所为(我认为),但我看不出使用其中一个的好处/缺点。

  • 如果我要创建一个小型HTTP服务器,我应该使用什么?
  • 如果我正在创建一个小型HTTP客户端,我应该使用什么?

这令我感到困惑......

2 个答案:

答案 0 :(得分:2)

你想要谈论的内容并不是特定于python而只是关于多处理与线程一般来说我认为你可以在谷歌的很多论点中找到更喜欢线程和其他人的论点更喜欢多处理。

但是对于python多线程是有限的(如果你使用CPython)GIL (Global Interpreter Lock),所以大多数python程序员更喜欢使用多处理而不是线程(这是Guido推荐)

  

然而,你是对的GIL是   没有你最初那么糟糕   想:你只需要撤消   你从Windows和Windows洗脑   Java支持者似乎在考虑   线程作为唯一的方法   并行活动,Guido van Rossum。

你可以在这里找到一些more信息

答案 1 :(得分:0)

当您拥有具有多个核心和/或CPU的计算机时,Python多处理是有意义的。使用线程和进程之间的主要区别在于进程不共享地址空间,因此一个进程无法轻松访问另一个进程的数据。这就是为什么多处理模块提供管理器和队列以及类似的东西。

线程问题是Pythons Global Interpreter Lock,它严重影响了多线程应用程序。

当您长时间运行IO操作(读取大文件,等待来自网络的响应)并且不希望您的应用程序阻止时,异步IO非常有用。许多操作系统都提供了内置的实现。

因此,对于您的服务器,您可能会使用多处理或多线程,而对于您的客户端,异步IO更合适。