Python:将大量数据从一个列表移动到另一个列表的有效方法

时间:2016-10-05 12:57:09

标签: python performance multiprocessing move

我正在使用multiprocessing,并且在一个单独的过程中(为了清楚起见,我们称之为线程),我使用PySerial从设备中提取数据。在我的程序中,我有一个与主线程共享的列表。我使用:

创建列表
import multiprocessing as mp
#... stuff
self.mpManager = mp.Manager()
self.shared_return_list = self.mpManager.list()

此列表在进程内填充,然后使用以下命令将其传送到本地线程:

if len(self.acqBuffer) < 50000:
    try:
        self.shared_result_lock.acquire()
        self.acqBuffer.extend(self.shared_return_list)
        del self.shared_return_list[:]
    finally:
        self.shared_result_lock.release()

其中acqBuffer是获取数据进行分析和存储的本地列表。

问题在于,如果设备有大量数据排队,那么传输过程将变得非常非常慢,因为存在大量数据,并且GUI冻结。可能的解决方案是以块的形式传输数据并主动保持GUI的恢复,或者找到一种传输数据的智能方法,这就是我所要求的。

在C ++中,我会使用移动构造函数使用std::dequestd::list(在内存中不一定是连续的)的导数,并使用std::move将指针推送到数据,而不是将整个数据重新复制到主线程。在我的Python案例中,这样的事情是否可行?有更明智的方法吗?

谢谢。

0 个答案:

没有答案