Я хочу назначить настраиваемое имя/идентификатор для 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
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.
Сначала выполните инициализацию класса и затем перепишите метод как таковой;
my_obj = Class() #Instantiate the class
my_obj.name = 'this is the string'
Это заменит построенное имя вашей собственной строкой.
your_greentlet.minimal_ident = 'your fancy name'
?