Интерфейс менеджера контекста в стандартной библиотеке python 2.5 уже реализуют:
- file
- thread.LockType
- threading.Lock
- threading.RLock
- threading.Condition
- threading.Semaphore
- threading.BoundedSemaphore
Список будет расширяться.
Пример использования оператора 'with':
#!/bin/env python
#-*- coding: utf-8 -*-
import threading
class Worker(object):
def __init__(self):
self.lock = threading.RLock()
def execute(self):
with self.lock:
print "thread safe work there"
if __name__ == '__main__':
worker = Worker()
# execute worker.execte() from many threads
# ...
worker.execute()
Примечания:
1. оператор 'with' появился c python 2.5
2. для использования 'with' в python 2.5 необходимо импортировать with_statement фичу из __future__ :
from __future__ import with_statement__
# using 'with'
С python 2.6 'with' работает из коробки :).
Дополнительная информация:
http://docs.python.org/reference/compound_stmts.html#with
http://www.python.org/dev/peps/pep-0343/
http://docs.python.org/reference/datamodel.html#context-managers
Комментариев нет:
Отправить комментарий