Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python多处理vs Eventlet_Python - Fatal编程技术网

Python多处理vs Eventlet

Python多处理vs Eventlet,python,Python,根据我的理解,线程不能并行执行(基于可用性和随机性执行),这就是使用Eventlet的原因 如果eventlet更倾向于并行,为什么我们不能使用Python的多处理模块呢 我考虑执行多进程模块,并使用join方法()检查是否所有进程都已完成 有人能解释一下我的理解是否正确吗 根据我的理解,线程不能并行执行(根据可用性和随机性执行) 正确的 这就是Eventlet被使用的原因 不太正确。Eventlet库用于简化非阻塞IO编程。它实际上并没有增加并行性。由于GIL,线程执行仍然限制为一次执行一个线

根据我的理解,线程不能并行执行(基于可用性和随机性执行),这就是使用Eventlet的原因

如果eventlet更倾向于并行,为什么我们不能使用Python的多处理模块呢

我考虑执行多进程模块,并使用join方法()检查是否所有进程都已完成

有人能解释一下我的理解是否正确吗

根据我的理解,线程不能并行执行(根据可用性和随机性执行)

正确的

这就是Eventlet被使用的原因

不太正确。Eventlet库用于简化非阻塞IO编程。它实际上并没有增加并行性。由于GIL,线程执行仍然限制为一次执行一个线程。但之所以使用它,是因为它大大简化了启动、调度和管理IO绑定线程的过程,特别是不需要相互交互的线程

如果Eventlet更适合并行性

正如我刚才提到的,这不是他们存在的目的

为什么我们不能使用Python的多处理模块呢。我考虑执行多进程模块,并使用join方法()检查是否所有进程都已完成

你当然可以!通过这种方法,您将获得实际的并行执行。但您可能无法获得相同的加速。多处理库更适合于CPU限制的并行任务,因为这些任务需要更频繁地访问解释器。由于多进程执行和管理的开销,当对IO绑定的任务使用多进程处理时,您实际上可能会看到执行时间的增加



与大多数优化和执行时间问题一样,尝试两者并进行分析是确保应用程序使用“最佳”选项的可靠方法。尽管您可能会发现,如果您先编写代码来利用Eventlet,然后尝试修改它以使用常规线程或多处理,您将不得不编写更多的样板代码来管理线程或进程,Eventlet的价值应该变得更加明显。

我可能大错特错,但从我对Eventlet的了解来看(以前从未听说过,谢谢你的提示)它执行非阻塞IO,因此允许执行流从池中的一个操作传递到下一个操作。虽然确实由于GIL,CPython中的线程没有并行运行,但下一个线程可以在IO操作阻塞时运行。因此理论上应该没有太大区别(除了编程容易之外)有人能确认/纠正我的思路吗?