Найти - Пользователи
Полная версия: Многопоточность и класс/экземпляр
Начало » Python для новичков » Многопоточность и класс/экземпляр
1
superantonio
Доброе утро, возникла необходимость написать на Python сетевую часть ПО, т.к. язык не основной для меня столкнулся с трудностями, вопросы может достаточно банальны, но все же решусь их задать -)

В параллельном потоке создается таймер, который тикает каждую секунду.
Есть класс ответственный за серверную часть (открытие/закрытие подключений итп, собственно там сущности подключенных пользователей),
отсюда вопрос как сделать что-то типа событий или получить доступ к методам экземпляра этого класса, сущность таймера прописал как поле, но таймер все равно на уровне класса, статичными методы тоже не сделать, потому что доступ к массиву пользователей идет через self.

Может не совсем понятно сформулировал, но готов прояснить -)
Спасибо.
Soteric
По-моему стоит пояснить. Кто кому события должен слать и почему инициатор события не может иметь ссылку на получателя?
superantonio
Есть класс самого сервера и таймера:

class Timer


class Server:
timer = Timer(tick) //конструктор принимает callback метод

def tick():
self.clients = sorted(self.clients)

def connectionMade(self):

def connectionLost(self,reason):

def dataReceived(self, data):

В классе сервера создаю экземпляр таймера, соответсвенное могу иметь доступ только к методам самого класса (статическим) Server.
А мне нужно каждый тик вызывать метод tick(), который является экземплярным, каждая сущность класса Server - подключенный пользователь и доступ к массиву всех пользователей идет через self. Вот в чем вопрос -)

И еще вопрос по self, я его не совсем понял в python, общий массив пользователей получается на уровне каждого пользователя, почему не на уровне класса (ведь в массиве все пользователи)?

Спасибо.
Soteric
Может быть так?
class Server(object):
def __init__(self):
self.timer = Timer(self.tick)

def tick(self):
self.clients = sorted(self.clients)
superantonio
И еще вопрос по self, я его не совсем понял в python, общий массив пользователей получается на уровне каждого пользователя, почему не на уровне класса (ведь в массиве все пользователи)?
У каждого экземпляра Server есть свой массив clients.
superantonio
Спасибо, но когда я вижу это я не совсем понимаю тогда что происходит (метод в классе Server):

def connectionMade(self):
self.clients.append(self)

В self.clients добавляется self, что здесь вообще self?
Soteric
self это ссылка экземпляра на самого себя. Аналог ‘this’ в Java и C#. Но там каждый раз писать ‘this’ необязательно, а здесь необходимо.
superantonio
Soteric, большое спасибо за потраченное на меня время :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB