Как я могу присвоить название гринлету - PullRequest
0 голосов
/ 27 августа 2018

Я хочу назначить пользовательское имя / идентификатор для 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

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

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 и документ дескриптора .

0 голосов
/ 27 августа 2018

Сначала создайте экземпляр класса, а затем перезапишите метод как таковой;

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

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

...