Как я могу присвоить название гринлету

1

Я хочу назначить настраиваемое имя/идентификатор для gevent greenlet. Gevent уже присваивает уникальное имя:

def name(self):
    """
    The greenlet name. By default, a unique name is constructed using
    the :attr:'minimal_ident'. You can assign a string to this
    value to change it. It is shown in the 'repr' of this object.

    .. versionadded:: 1.3a2
    """

Однако я не уверен, как изменить это значение на введенное пользователем имя. Можно ли это сделать?

Я попытался сделать что-то вроде этого и закончил с ошибкой атрибута:

       def begin(self):
          self.thread = gevent.spawn(self.print_message)
          self.thread.minimal_ident = "t1"
          print(self.thread.name) 

AttributeError: attribute 'minimal_ident' of 
'gevent._greenlet.Greenlet' objects is not writable
  • 0
    like your_greentlet.minimal_ident = 'your fancy name' ?
Теги:
gevent

2 ответа

1
Лучший ответ

gevent.Greenlet.name не является общим property, но gevent.util.readproperty obj, который является специальным дескриптором без данных, работает как @property и для дескриптора без данных:

... Напротив, дескрипторы данных без данных могут быть переопределены экземплярами.

вы можете переопределить его просто:

>>> gr = gevent.spawn(gevent.sleep, (1,))
>>> gr.name = "a_cool_name"
>>> print(gr)
<Greenlet "a_cool_name" at 0x1082a47b8: sleep((1,))>

читайте больше о источнике gevent и документе descriptor.

0

Сначала выполните инициализацию класса и затем перепишите метод как таковой;

my_obj = Class() #Instantiate the class
my_obj.name = 'this is the string'

Это заменит построенное имя вашей собственной строкой.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню