#python #tkinter
#python #tkinter
Вопрос:
Я пытался выполнить визуализацию сортировки. Я выполнил 3 визуализации пузырьковой, быстрой и сортировки слиянием. Когда я запускаю эту сортировку, она происходит одна за другой. Как запустить все три функции одновременно, чтобы я мог сравнить все три.
Это общая форма, которую я сделал,
def OnClick():
BubbleSort(parameters)
QuickSort(parameters)
MeregeSort(parameters)
Я хочу, чтобы все три функции выполнялись одновременно.
Комментарии:
1. Можете ли вы отправить полный код?
Ответ №1:
Вы можете использовать multiprocessing
использование import multiprocessing
или import concurrent.futures
https://docs.python.org/3/library/multiprocessing.html , Документы для
multiprocessing
https://docs.python.org/3/library/concurrent.futures.html , Документы дляconcurrent.futures
Комментарии:
1. многопроцессорная обработка — это не то, что он ищет, он хочет визуализировать их вместе, а не выполнять вычисления параллельно.
2. Да, есть ли какой-нибудь способ сделать это?
Ответ №2:
вы можете реализовать пошаговую функцию для каждого алгоритма и просто запускать в цикле и визуализировать по одному шагу за раз для каждого алгоритма. При необходимости рассмотрите возможность сохранения состояния алгоритма в объекте состояния.
Редактировать
Я могу предложить довольно простую реализацию для этого: давайте, например, используем boublesort. Создайте объект BoublesortVisualizer и определите пошаговую функцию, которая реализуется путем запуска boublesort с некоторого шага во время выполнения алгоритма на один шаг вперед (скажем, в каждом цикле). чтобы узнать, на каком этапе вы находитесь, поддерживайте некоторое состояние в классе. Сделайте то же самое для других алгоритмов сортировки.
теперь запустите цикл в вашей функции OnClick, которая вызывает функцию step для каждой имеющейся у вас функции сортировки.
Ответ №3:
Вы можете попробовать запустить три функции в отдельных потоках:
import threading
def OnClick():
for func in (BubbleSort, QuickSort, MergeSort):
threading.Thread(target=func, args=(parameters,), daemon=True).start()