【问题标题】:Python threads for networking - threads don't run in parallel用于网络的 Python 线程 - 线程不并行运行
【发布时间】:2014-10-30 14:00:56
【问题描述】:
我正在尝试在服务器程序中使用两个线程,一个用于使用 Twisted 库侦听来自客户端的任何通信,另一个用于在服务器上进行一些其他计算。在我尝试实现线程时,python 线程库似乎不支持this 问题中回答的并行线程。我想知道是否有任何其他 python 库可以解决这个问题?或者任何其他方式来规避这个限制?
提前谢谢你。
【问题讨论】:
标签:
python
multithreading
twisted
【解决方案1】:
Python 的 GIL(全局解释器锁)可防止两个线程同时执行 Python 代码。幸运的是,这不包括 I/O,因此如果您的线程处理大量的网络、数据库或文件系统,那么通常的线程确实可以正常工作。它们不会让您利用多个核心进行计算,但会让其他线程前进,同时任意数量的线程都在等待某事发生。
如果您的计算需求比 I/O 更多,那么线程(在 Python 上实现)将无济于事。最好使用 multiprocessing 模块(自 Python 2.6 以来的标准),它使用“类似线程”的 API 来生成多个进程,每个进程都有一个独立的 Python 解释器,因此它是自己的 GIL。