Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 10, 2009 15:49:34

nJLyTo
От:
Зарегистрирован: 2008-11-11
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Классы и потоки

Написал небольшой класс для отрисовки необходимых сведений с двумя вариантами вызова функции:

1. При вызове первого варианта (menu.redraw()) появляется ошибка такого плана:
MainMenu instance has no attribute ‘canvas’
при этом сама программа продолжает работу. Сам я так и не смог разобраться, почему он ругается.

2. При вызове menu.redraw в новом потоке программа вообще не работает.
t = Thread(target = menu.redraw)
t.start()
Прошу помощи.

from appuifw import app, Canvas
from graphics import Image
from threading import Thread
import e32

class MainMenu:
def __init__(self):
app.body = self.canvas = Canvas(redraw_callback=self.handle_redraw)
app.menu = [(u"Exit", self.quit)]
self.img = Image.new(self.canvas.size)
self.talk_with_server = 1

def quit(self):
self.talk_with_server = 0

def handle_redraw(self, rect):
self.canvas.blit(self.img)

def redraw(self):
while self.talk_with_server:
self.img.clear(0)
self.img.text((20,30), u'first',0xff0000)
self.img.text((20,55), u'second', 0xff0000)
self.handle_redraw(())
e32.ao_yield()

menu = MainMenu()

#1. menu.redraw()

#2. t = Thread(target = menu.redraw)
# t.start()
И в завершении хотелось бы узнать, существует ли в питоне приоритетность выполнения потоков, например, между основным потоком и дочерними?



Офлайн

#2 Фев. 10, 2009 17:40:30

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Классы и потоки

Вообще, я часто наблюдал, когда питон на симбиане “теряет” объекты в некоторых случаях. Особенно в классах.
Природу этого явления так и не понимаю, как не понимаю, в каких именно случаях это происходит (Ну как прикажете бороться с вылезающим иногда(!) NameError: name ‘str’ is not defined, например)
По поводупитоновских потоков, насколько я знаю, это не реально. Можно извратится, запустить демона, и через модуль miso выставить ему приоритет. Но ограничений куча. Уж лучше придумать свои извращения или костыли :)
А вообще, в большинстве задач, можно сделать и одним потоком, гуи то работать будет, калбеки вызываться будут, даже если твой скрипт что то делает в это время ( while 1:pass не в счет)



Отредактировано (Фев. 10, 2009 17:43:58)

Офлайн

#3 Фев. 10, 2009 18:07:33

nJLyTo
От:
Зарегистрирован: 2008-11-11
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Классы и потоки

Вот в том-то и беда, что подругому сделать я не могу. В программе два класса, один отрисовывает, а другой выполняет N функцию, причем делает он это долго. Пробовал делать таймер, рекурсию и все такое… Единственный вариант, который у меня действительно работает, это в основном потоке отрисовывать, а в дочернем выполнять N функцию, но тогда скорость работы сильно падает. Хотел поменять классы местами (в надежде, что основной поток выполняется быстрее), но как ты уже видишь, не получается.



Офлайн

#4 Фев. 10, 2009 18:15:18

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Классы и потоки

эээ… А если в одном потоке и выполнять и отрисовывать, в чем проблема? Я обычно так и делал.



Офлайн

#5 Фев. 10, 2009 18:18:41

nJLyTo
От:
Зарегистрирован: 2008-11-11
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Классы и потоки

Слушай, может я туплю, а что если ты глянешь на исходник?



Офлайн

#6 Фев. 11, 2009 13:52:42

nJLyTo
От:
Зарегистрирован: 2008-11-11
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Классы и потоки

Все, проблема решилась. Спасибо за помощь ;-)



Офлайн

#7 Фев. 11, 2009 17:16:21

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Классы и потоки

Скажи хоть как :)
P.S. У меня трубка в ремонте, не смог проверить твой код.



Офлайн

#8 Фев. 11, 2009 17:47:05

nJLyTo
От:
Зарегистрирован: 2008-11-11
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Классы и потоки

В принципе, недочетов у меня было много. Рассказывать пока ничего не буду, т.к. проект скоро выйдет в свет! Первым пришлю тебе :-)



Офлайн

#9 Фев. 11, 2009 20:19:31

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Классы и потоки

Хех , не знаю, что это, но могу потестить :)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version