Я новичок в Python и пытаюсь использовать многопоточность.Уже существует подробный комментарий к Stackoverflow по этой теме, но у меня все еще есть некоторые вопросы.
Цель моей программы - создать и заполнить массив (хотя я предполагаю, чтотехнически его нужно было бы назвать «списком» в Python) и отсортировать его по алгоритму «разделяй и властвуй».К сожалению, термины «список» и «массив» кажутся многим пользователем смешанными, даже если они не совпадают.Если в моем комментарии используется «массив», имейте в виду, что я разместил различный код на разных ресурсах и ради уважения первоначального автора (ов) не изменил его содержание.
Мой коддля заполнения списка count
было довольно просто
#!/usr/bin/env python3
count = []
i = 149
while i >= 0:
count.append(i)
print(i)
i -= 1
После этого я использовал это очень удобное руководство по теме «разделяй и властвуй», чтобы создать два списка для сортировки, которыебыли объединены позже.Моя главная задача сейчас состоит в том, чтобы правильно использовать эти списки с многопоточностью.
В ранее упомянутом посте утверждалось, что, в принципе, для использования многопоточности требовалось всего несколько строк кода:
from multiprocessing.dummy import Pool as ThreadPool
pool = ThreadPool(4)
, а также
results = pool.starmap(function, zip(list_a, list_b))
для передачи нескольких списков.
Я пытался адаптировать код, но не смог.Параметры моей функции: def merge(count, l, m, r)
(используется для разделения списка count
на левую и правую части), а два временно созданных списка называются L
и R
.
def merge(arr, l, m, r):
n1 = m - l + 1
n2 = r- m
# create temp arrays
L = [0] * (n1)
R = [0] * (n2)
Нокаждый раз, когда я запускаю программу, она просто выдает следующее сообщение об ошибке:
Traceback (most recent call last):
File "./DaCcountdownTEST.py", line 71, in <module>
results = pool.starmap(merge,zip(L,R))
NameError: name 'L' is not defined
Я не знаю причину моей проблемы.
Любая помощь очень ценится!