Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.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 熊猫数据帧多线程没有性能增益_Python_Multithreading_Pandas_Multiprocessing - Fatal编程技术网

Python 熊猫数据帧多线程没有性能增益

Python 熊猫数据帧多线程没有性能增益,python,multithreading,pandas,multiprocessing,Python,Multithreading,Pandas,Multiprocessing,我有一个字典(在内存中)数据,它有大约10000个键,每个键代表一个股票行情,该值存储每日股票价格的时间序列数据的数据帧表示。我在试着计算两两 代码需要很长时间~3小时才能完全迭代所有组合O(n^2)~C(21000)。我尝试使用虚拟软件包,但没有看到任何性能提升(实际上,随着员工数量的增加,速度会变慢) 所有数据都已加载到内存中,因此它不应该是IO密集型的。是否有任何原因可以解释为什么没有任何性能提升 当您使用multiprocessing.dummy时,您使用的是线程,而不是进程。对于Pyt

我有一个字典(在内存中)
数据
,它有大约10000个键,每个键代表一个股票行情,该值存储每日股票价格的时间序列数据的数据帧表示。我在试着计算两两

代码需要很长时间~3小时才能完全迭代所有组合
O(n^2)~C(21000)
。我尝试使用虚拟软件包,但没有看到任何性能提升(实际上,随着员工数量的增加,速度会变慢)


所有数据都已加载到内存中,因此它不应该是IO密集型的。是否有任何原因可以解释为什么没有任何性能提升

当您使用multiprocessing.dummy时,您使用的是线程,而不是进程。对于Python中CPU受限的应用程序,在使用多线程时通常不会获得性能提升。您应该使用多处理来并行化Python中的代码。因此,如果您将代码从

from multiprocessing.dummy import Pool 

这将大大提高您的绩效

以上内容将解决您的问题,但如果您想知道为什么会发生这种情况。请继续阅读:


Python中的多线程具有全局解释器锁(GIL),防止同一进程中的两个线程同时运行。如果发生了大量磁盘IO,多线程将有所帮助,因为磁盘IO是可以处理锁的独立进程。或者,如果Python代码使用一个单独的应用程序来处理锁,那么多线程将有所帮助。另一方面,多处理将使用CPU的所有核心作为单独的进程,而不是多线程。在CPU绑定的Python应用程序(如您的应用程序)中,如果您使用多处理而不是多线程,您的应用程序将在多个内核上并行运行多个进程,这将提高应用程序的性能。

这很有魅力,您还可以编写类似于
池(multiprocessing.CPU\u count())的代码
因此,它与平台无关,并将尽可能多地利用计算能力。
from multiprocessing.dummy import Pool 
from multiprocessing import Pool