Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 11, 2008 16:36:47

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

id как ключ

Есть шедулер, в который добавляются таски, при добавлении хотелось бы возвращать идентификатор таска, что бы в дальнейшем можно было изменять его параметры. Как вариант, можно было бы использовать результат функции id(task), так как в доке написано:

This is an integer (or long integer) which is guaranteed to be unique and constant for this object during its lifetime
Могут ли возникнуть какие-нибудь побочные эффекты у такого решения?



Офлайн

#2 Авг. 11, 2008 16:53:26

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

id как ключ

не стоит.
Лучше придумать свой идентификатор.



Офлайн

#3 Авг. 11, 2008 16:57:35

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

id как ключ

а в чем может быть проблема?



Офлайн

#4 Авг. 11, 2008 17:09:34

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

id как ключ

id - Это что-то типа адреса в памяти.
Соотвественно при каждом запуске скрипта - есть большая верятность, что он будет новый.
Если сохранить таск в базу, а потом загрузить оттуда, он тоже будет новый.
Если.. скопировать таск - то id тоже будет новый.
Ну и есть еще несколько не столь очевидных случаев, когда срабатывает копирование а не присваивание нового имени на тот-же объект.
Чтоб по этому поводу голова не болела - яб завел отдельный id =)



Отредактировано (Авг. 11, 2008 17:09:55)

Офлайн

#5 Авг. 11, 2008 17:15:17

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

id как ключ

ок, так и сделаю. спасибо



Офлайн

#6 Авг. 13, 2008 15:55:47

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

id как ключ

оО… а почему не сделать класс Task, и использовать объекты?



Офлайн

#7 Авг. 13, 2008 16:27:23

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

id как ключ

Task создается в потоке шедулера. Просто не хотится добавлять к нему локи.
Примерно так:

class Scheduler(threading.Thread):
def add(self, fn, calc_time):
key = self.getKey()
with self.lock:
self.items[key] = Task(fn, calc_time)
return key

def update(self, key, calc_time):
with self.lock:
self.items[key].setCalcTime(calc_time)



Офлайн

#8 Авг. 13, 2008 17:38:57

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

id как ключ

class Scheduler(threading.Thread):
def add(self, fn, calc_time):
key = self.getKey()
with self.lock:
task = Task(fn, calc_time)
self.items.append(task)
return task

def update(self, task, calc_time):
with self.lock:
task.setCalcTime(calc_time)
если я все понял так как надо.



Офлайн

#9 Авг. 14, 2008 11:42:40

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

id как ключ

да, это хороший вариант



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version