我正在尝试使用Python多处理实现mergesort而不使用任何内置函数,以便在新进程中启动每个级别的排序。在子列表达到某个阈值后,算法应该切换到bubblesort(我知道它不是最好的,但我只是练习)。我有两个问题,第一个问题是,我无法真正地解决合并部分应该出现的问题。如果我在主函数中合并所有已排序的子列表,它可以正常工作,但这不是它应该如何工作。所以现在我试图保持我的manager.list()
合并,但我遇到了一个错误,即使我明确声明如果列表的长度小于2通过一个循环应该没有操作像这样:
while (len(resp) > 1):
resp.append(merge(resp.pop(0), resp.pop(0)))
部分流程仍然以
回归Traceback (most recent call last):
File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
self._target(*self._args, **self._kwargs)
File "<ipython-input-66-193b11c211db>", line 34, in merge_sort
resp.append(merge(resp.pop(0), resp.pop(0)))
File "<string>", line 2, in pop
File "/usr/lib/python2.7/multiprocessing/managers.py", line 774, in _callmethod
raise convert_to_error(kind, result)
IndexError: pop from empty list
所以我的主要问题是,我应该如何实现这个算法?或者,更准确地说,合并应在何处以及如何进行?代码对于SO问题来说有点太大了,所以你可以找到它here。哦,我也看过this解决方案,但是这个只是将输入数据分成块并分别处理这些块,但是,我必须为每个分割级别创建一个新进程,而不是为大块数据。