Форум сайта python.su
Есть шедулер, в который добавляются таски, при добавлении хотелось бы возвращать идентификатор таска, что бы в дальнейшем можно было изменять его параметры. Как вариант, можно было бы использовать результат функции id(task), так как в доке написано:
This is an integer (or long integer) which is guaranteed to be unique and constant for this object during its lifetimeМогут ли возникнуть какие-нибудь побочные эффекты у такого решения?
Офлайн
не стоит.
Лучше придумать свой идентификатор.
Офлайн
а в чем может быть проблема?
Офлайн
id - Это что-то типа адреса в памяти.
Соотвественно при каждом запуске скрипта - есть большая верятность, что он будет новый.
Если сохранить таск в базу, а потом загрузить оттуда, он тоже будет новый.
Если.. скопировать таск - то id тоже будет новый.
Ну и есть еще несколько не столь очевидных случаев, когда срабатывает копирование а не присваивание нового имени на тот-же объект.
Чтоб по этому поводу голова не болела - яб завел отдельный id =)
Отредактировано (Авг. 11, 2008 17:09:55)
Офлайн
ок, так и сделаю. спасибо
Офлайн
оО… а почему не сделать класс Task, и использовать объекты?
Офлайн
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)
Офлайн
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)
Офлайн
да, это хороший вариант
Офлайн