多进程与线程Python
我想了解多线程处理的优点。 我知道多处理技术可以解决Global Interpreter Lock问题,但是还有什么其他的优势,并且可以通过线程处理而不是做同样的事情?
threading
模块使用线程, multiprocessing
模块使用进程。 不同之处在于线程运行在相同的内存空间中,而进程具有单独的内存。 这使得在多进程进程之间共享对象变得更加困难。 由于线程使用相同的内存,因此必须采取预防措施,或者两个线程同时写入同一内存。 这是全球解释器锁的用途。
产卵过程比产卵线程慢一点。 一旦他们跑步,没有太大的区别。
这是我提出的一些优点/缺点。
多
优点
multiprocessing
模块包含有用的抽象接口,与threading.Thread
非常相似 缺点
穿线
优点
缺点
Queue
模块),则手动使用同步基元成为必需(需要确定锁定的粒度) 线程的工作是使应用程序能够响应。 假设你有一个数据库连接,你需要响应用户输入。 如果没有线程,如果数据库连接繁忙,应用程序将无法响应用户。 通过将数据库连接拆分为单独的线程,可以使应用程序更具响应性。 同样因为两个线程都处于相同的进程中,他们可以访问相同的数据结构 - 良好的性能,以及灵活的软件设计。
请注意,由于GIL,应用程序实际上并不是同时做两件事,但我们所做的是将数据库上的资源锁放入单独的线程中,以便可以在它与用户交互之间切换CPU时间。 CPU时间在线程之间进行配给。
多重处理适用于您在任何特定时间确实需要完成多项任务的时候。 假设您的应用程序需要连接到6个数据库并对每个数据集执行复杂的矩阵转换。 将每个作业放在一个单独的线程中可能会有所帮助,因为当一个连接空闲时,另一个可能会获得一些CPU时间,但处理不会并行完成,因为GIL意味着您只使用一个CPU的资源。 通过将每个作业放在多处理进程中,每个作业都可以在它自己的CPU上运行并以最高效率运行。
链接地址: http://www.djcxy.com/p/1617.html上一篇: Multiprocessing vs Threading Python
下一篇: Calling a function of a module by using its name (a string)