Следующий пример иллюстрирует параллельность выполнения потоков,используя возможности библиотеки графических примитивов Tkinter(она входит в стандартную 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Следующий пример иллюстрирует параллельность выполнения потоков,используя возможности библиотеки графических примитивов Tkinter(она входит в стандартную

Поиск

Визуализация работы потоков

 

Следующий пример иллюстрирует параллельность выполнения потоков,используя возможности библиотеки графических примитивов Tkinter(она входит в стандартную

поставкуPython).Несколько потоков наперегонки увеличивают размеры прямоугольника некоторого цвета.Цветом победившего потока окрашивается кнопкаGo:

 

import threading, time, sys

 

from Tkinter import Tk, Canvas, Button, LEFT, RIGHT, NORMAL,

 

DISABLED

 

global champion

 

# Задается дистанция, цвет полосок и другие параметры distance = 300

 

colors = ["Red","Orange","Yellow","Green","Blue","DarkBlue","Violet"]

nrunners = len(colors)       # количество дополнительных потоков

positions = [0] * nrunners # список текущих позиций

 

h, h2 = 20, 10                       # параметры высоты полосок

 

def run(n):

 

"""Программа бега n-го участника (потока)""" global champion

while 1:

# интенсивные вычисления

 

for i in range(10000):

 

pass

 

 

graph_lock.acquire()

# передвижение на шаг

 

positions[n] += 1

 

if positions[n] == distance:

# если уже финиш

 

if champion is None:

# и чемпион еще не определен,

 

champion = colors[n]

# назначается чемпион

 

graph_lock.release()

 

 

break

 

 

graph_lock.release()

 

 

 

def ready_steady_go():

 

"""Инициализация начальных позиций и запуск потоков"""

graph_lock.acquire()

 

for i in range(nrunners): positions[i] = 0

 

threading.Thread(target=run, args=[i,]).start() graph_lock.release()

 

def update_positions():


 


"""Обновление позиций"""

 

graph_lock.acquire()

for n in range(nrunners):

 

c.coords(rects[n], 0, n*h, positions[n], n*h+h2) tk.update_idletasks() # прорисовка изменений graph_lock.release()

 

def quit():

 



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 75; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.01 с.)