python多线程排序
时间: 2023-10-16 12:07:56 浏览: 109
在Python中,可以使用多线程对列表进行排序。下面是一个使用多线程排序的示例代码:
```python
import threading
import random
def merge_sort(arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2
left = arr[:mid]
right = arr[mid:]
left = merge_sort(left)
right merge_sort(right)
return merge(left, right)
def merge(left, right):
merged = []
i = j = 0
while i < len(left) and j < len(right):
if left[i] < right[j]:
merged.append(left[i])
i += 1
else:
merged.append(right[j])
j += 1
while i < len(left):
merged.append(left[i])
i += 1
while j < len(right):
merged.append(right[j])
j += 1
return merged
def threaded_merge_sort(arr, num_threads):
if num_threads <= 1 or len(arr) <= 1:
return merge_sort(arr)
mid = len(arr) // 2
left = arr[:mid]
right = arr[mid:]
left_sorted = []
right_sorted = []
# 创建线程
left_thread = threading.Thread(target=lambda: left_sorted.extend(threaded_merge_sort(left, num_threads // 2)))
right_thread = threading.Thread(target=lambda: right_sorted.extend(threaded_merge_sort(right, num_threads // 2)))
# 启动线程
left_thread.start()
right_thread.start()
# 等待线程结束
left_thread.join()
right_thread.join()
return merge(left_sorted, right_sorted)
# 示例用法
arr = [random.randint(0, 100) for _ in range(10)]
print('原始列表:', arr)
sorted_arr = threaded_merge_sort(arr, num_threads=2)
print('排序后的列表:', sorted_arr)
```
这个示例代码中,首先定义了一个`merge_sort()`函数,用于对列表进行归并排序。然后定义了`merge()`函数,用于将两个有序列表合并为一个有序列表。
接下来,定义了`threaded_merge_sort()`函数,该函数使用多线程对列表进行排序。它首先将列表分成两半,然后使用多线程分别对两半进行排序。使用`threading.Thread()`创建两个线程,并使用`thread.start()`方法启动这两个线程。最后使用`thread.join()`方法等待线程结束。
注意,在示例中,`num_threads`参数用于控制使用的线程数。如果`num_threads`小于等于1或者列表长度小于等于1,则直接调用普通的`merge_sort()`函数进行排序。
希望这个示例能帮助到你!
阅读全文