Совместное выполнение нескольких функций в tkinter

#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()