我试着做两件事。冒泡排序和插入排序,以练习在python中使用多线程。当我一个接一个地运行两个线程时,冒泡排序会得到一个越界错误列表。这让我很困惑,因为它可以独立工作,但不希望与同时运行的其他线程一起工作
Error:
Traceback (most recent call last):
File "/usr/lib/python3.7/threading.py", line 926, in _bootstrap_inner
self.run()
File "/usr/lib/python3.7/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "test.py", line 21, in bubbleSortArray
if arr[x] < arr[y]:
IndexError: list index out of range
import threading
from tqdm import tqdm
import random
def insertionSortArray(arr):
# Simple Insertion sort to start out
for x in tqdm(range(len(arr))):
for y in range(x):
if arr[x] < arr[y]:
arr.insert(y, arr[x])
del arr[x + 1]
break
print(arr)
def bubbleSortArray(arr):
# Simple Bubble sort to start out
for x in tqdm(range(len(arr))):
for y in range(len(arr)):
if arr[x] < arr[y]:
temp = arr[x]
arr[x] = arr[y]
arr[y] = temp
print(arr)
def generateArray(size):
return [random.randrange(0, 10000) for x in range(size)]
#generating the array for the thread functions
array = generateArray(10000)
bubble = threading.Thread(target = bubbleSortArray, args=[array])
insertion = threading.Thread(target = insertionSortArray, args=[array])
bubble.start()
insertion.start()
解决方案是不向两个线程传递相同的数组对象。复印一份
还可以使用
position
参数tqdm
来处理线程输出:
如果删除了
.copy()
:相关问题 更多 >
编程相关推荐