Exemplo n.º 1
0
 def __init__(self, process_num = 1):
     if MultiProcessProjectImport._instance == None:
         self.process_num = process_num
         for i in xrange(process_num):
             pipe_master, pipe_client = Pipe()
             MultiProcessProjectImport.WRITE_LOCKS.append(toro.Lock())
             MultiProcessProjectImport.READ_LOCKS.append(toro.Lock())
             p = ProjectImportProcess(i, pipe_client)
             p.daemon = True
             MultiProcessProjectImport.PROCESS_LIST.append(p)
             MultiProcessProjectImport.PROCESS_DICT[i] = [p, pipe_master]
             p.start()
         MultiProcessProjectImport._instance = self
     else:
         self.process_num = MultiProcessProjectImport._instance.process_num
Exemplo n.º 2
0
 def test_acquire_release(self):
     lock = toro.Lock()
     self.assertFalse(lock.locked())
     self.assertTrue(lock.acquire())
     self.assertTrue(lock.locked())
     lock.release()
     self.assertFalse(lock.locked())
Exemplo n.º 3
0
 def test_acquire_callback(self):
     lock = toro.Lock()
     history = []
     lock.acquire().add_done_callback(make_callback('acquire1', history))
     lock.acquire().add_done_callback(make_callback('acquire2', history))
     lock.release()
     history.append('release')
     self.assertEqual(['acquire1', 'acquire2', 'release'], history)
Exemplo n.º 4
0
 def __init__(self, filename, name, description, params, filtered_params,
              needs_lock):
     self.lock = toro.Lock()
     self.filename = filename
     self.name = name
     self.description = description
     self.params = params
     self.filtered_params = filtered_params
     self.needs_lock = needs_lock
Exemplo n.º 5
0
 def __init__(self, filename, name, description, params, filtered_params, tags, http_method, output, needs_lock):
     self.lock = toro.Lock()
     self.filename = filename
     self.name = name
     self.description = description
     self.params = params
     self.filtered_params = filtered_params
     self.tags = tags
     self.http_method = http_method
     self.needs_lock = needs_lock
     self.output = output
Exemplo n.º 6
0
    def test_acquire_timeout(self):
        lock = toro.Lock()
        self.assertTrue(lock.acquire())
        self.assertTrue(lock.locked())
        st = time.time()

        with assert_raises(toro.Timeout):
            yield lock.acquire(deadline=timedelta(seconds=0.1))

        duration = time.time() - st
        self.assertAlmostEqual(0.1, duration, places=1)
        self.assertTrue(lock.locked())
Exemplo n.º 7
0
    def test_acquire_contended(self):
        lock = toro.Lock()
        self.assertTrue(lock.acquire())
        N = 5

        @gen.coroutine
        def f():
            yield lock.acquire()
            lock.release()

        futures = [f() for _ in range(N)]
        lock.release()
        yield futures
Exemplo n.º 8
0
    def __init__(self, connection_pool, refresh_interval, io_loop=None, executor=None):
        self.io_loop = io_loop or IOLoop.instance()
        self.executor = executor or self.executor
        self.connection_pool = connection_pool
        self.lock = toro.Lock()
        self.name = self.__class__.__name__

        self.status = "Started"
        self.runtime = 0
        self.refresh_finished_at = None
        self.refresh_started_at = None
        self.refresh_interval = refresh_interval.seconds

        self.periodic_callback = PeriodicCallback(self._refresh, refresh_interval.seconds*1000)
Exemplo n.º 9
0
    def __init__(self, host, port, stream=None, io_loop=None,
                 read_timeout=DEFAULT_READ_TIMEOUT):
        self.host = host
        self.port = port
        self.io_loop = io_loop or ioloop.IOLoop.current()
        self.read_timeout = read_timeout
        self.is_queuing_reads = False
        self.read_queue = []
        self.__wbuf = BytesIO()
        self._read_lock = toro.Lock()

        # servers provide a ready-to-go stream
        self.stream = stream
        if self.stream is not None:
            self._set_close_callback()
Exemplo n.º 10
0
    def test_reacquire(self):
        # Lock needs to be released before re-acquiring.
        lock = toro.Lock()
        phase = []

        @gen.coroutine
        def f():
            yield lock.acquire()
            self.assertTrue(lock.locked())
            phase.append(None)
            yield lock.acquire()
            self.assertTrue(lock.locked())
            phase.append(None)

        future = f()

        while len(phase) == 0:
            yield gen.Task(self.io_loop.add_callback)

        self.assertEqual(len(phase), 1)
        lock.release()
        yield future
        self.assertEqual(len(phase), 2)
Exemplo n.º 11
0
 def test_str(self):
     lock = toro.Lock()
     # No errors in various states
     str(lock)
     lock.acquire()
     str(lock)
Exemplo n.º 12
0
 def test_multi_release(self):
     lock = toro.Lock()
     lock.acquire()
     lock.release()
     self.assertRaises(RuntimeError, lock.release)
Exemplo n.º 13
0
``shutdown`` stops the IOLoop. We want any request that ``poll`` has begun to
complete before the loop stops, so ``poll`` acquires the lock before starting
each HTTP request and releases it when the request completes. ``shutdown`` also
acquires the lock before stopping the IOLoop.

(Inspired by a post_ to the Tornado mailing list.)

.. _post: https://groups.google.com/d/topic/python-tornado/CXg5WwufOvU/discussion
"""

# start-file
import datetime
from tornado import ioloop, gen, httpclient
import toro

lock = toro.Lock()
loop = ioloop.IOLoop.current()


@gen.coroutine
def poll():
    client = httpclient.AsyncHTTPClient()
    while True:
        with (yield lock.acquire()):
            print 'Starting request'
            response = yield client.fetch('http://www.tornadoweb.org/')
            print response.code

        # Wait a tenth of a second before next request
        yield gen.Task(loop.add_timeout, datetime.timedelta(seconds=0.1))