ich hab folgendes Schnipsel:
Code: Alles auswählen
def set_to_event_queue(self, event):
u"""Fügt das Event in die queue *event_queue* ein.
Organisation: fifo"""
print 'set'
try:
self.__event_queue_lock.acquire()
self.__event_queue.append(event)
self.__event_queue_lock.release()
except Exception, e:
print (_(u'Der Zugriff auf die Queue ist fehlgeschlagen: %s' % e))
raise InitializationException
def del_from_event_queue(self):
u"""
Organisation: fifo
@return: event""" # @fixme: header
print 'del'
try:
self.__event_queue_lock.acquire()
event_queue = self.__event_queue.pop()
self.__event_queue_lock.release()
return event_queue
except IndexError:
return None
except Exception, e:
print (_(u'Der Zugriff auf die Queue ist fehlgeschlagen: %s' % e))
raise InitializationException
def get_event_queue(self):
u"""Gibt die Eventqueue als Liste aus.
@return: event_queue"""
print 'get'
try:
self.__event_queue_lock.acquire()
event_queue = self.__event_queue
self.__event_queue_lock.release()
return event_queue
except Exception, e:
print (_(u'Der Zugriff auf die Queue ist fehlgeschlagen: %s' % e))
raise InitializationException
event_queue = property(get_event_queue,set_to_event_queue,del_from_event_queue,'event_queue property')
_Hintergrund_
Ich baue an einer Klasse auf die mehrere Threads zugreifen und möchte die queue schützen. Ich weiß das ich dafür auch ein Queue- Objekt nutzen kann, wollte ich hier aber nicht.
_Problem_
Es funktioniert nicht wie erwartet.
Code: Alles auswählen
$ python
Python 2.6.4 (r264:75706, Nov 2 2009, 14:38:03)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import plugin
>>> p = plugin.Plugin()
>>> print p
<Plugin(Thread-1, initial)>
>>> p.event_queue
get
[]
>>> p.event_queue.append('lala')
get
>>> p.event_queue
get
['lala']
>>>
Doch der Zugriff über append() geht nicht durch das property().
Code: Alles auswählen
>>> p.event_queue.append('lala')
get
>>> p.event_queue
get
['lala']
>>> p.event_queue = 'lala'
set
>>> p.event_queue
get
['lala', 'lala']
>>> p.event_queue = 'lele'
set
>>> p.event_queue
get
['lala', 'lala', 'lele']
Wenn jetzt jemand anderes mit der Klasse arbeitet, nehme ich an, das er sich nur anschaut von welchem type event_queue ist und unteranderem über append() zugreifen will.
_Frage_
Muss ich jetzt eine neue Klasse erzeugen die von list erbt um das abzufangen, oder kann man das property() entsprechend anpassen.
Danke
Con