Files
ResInsight/ThirdParty/Ert/python/tests/util/test_thread_pool.py
T
Jacob Støren f5d1d2d1f9 #1396 Update libEcl to 06a39878636af0bc52582430ad0431450e51139c
To include phase split well connection rates and some summary intersect support. Supposedly Final update before release.
2017-05-08 13:37:39 +02:00

102 lines
2.2 KiB
Python

import time
from ecl.util import ThreadPool
from ecl.util.thread_pool import Task
from ecl.test import ExtendedTestCase
class ThreadPoolTest(ExtendedTestCase):
def sleepTask(self, *args, **kwargs):
time.sleep(args[0])
def numberer(self, index, result):
result[index] = True
def test_pool_creation(self):
pool = ThreadPool(4)
self.assertEqual(4, pool.poolSize())
def noop(*args, **kwargs):
pass
pool.addTask(noop)
self.assertEqual(1, pool.taskCount())
pool.addTask(noop, 1, 2, 3)
self.assertEqual(2, pool.taskCount())
pool.addTask(noop, 1, 2, 3, name="name", group="group", purpose="porpoise")
self.assertEqual(3, pool.taskCount())
self.assertEqual(pool.runningCount(), 0)
self.assertEqual(pool.doneCount(), 0)
def test_pool_execution(self):
pool = ThreadPool(4)
result = {}
for index in range(10):
pool.addTask(self.numberer, index, result=result)
pool.nonBlockingStart()
pool.join()
for index in range(10):
self.assertTrue(index in result)
self.assertTrue(result[index])
self.assertFalse(pool.hasFailedTasks())
def test_pool_unbound_fail(self):
pool = ThreadPool(4)
self.assertEqual(4, pool.poolSize())
pool.addTask(ThreadPoolTest.numberer, 0, {})
pool.nonBlockingStart()
pool.join()
self.assertTrue(pool.hasFailedTasks())
def test_fill_pool(self):
pool = ThreadPool(4)
for index in range(10):
pool.addTask(self.sleepTask, 2)
pool.nonBlockingStart()
time.sleep(0.5)
self.assertEqual(pool.doneCount(), 0)
self.assertEqual(pool.runningCount(), 4)
pool.join()
def test_task(self):
def sleeping():
time.sleep(1)
task = Task(sleeping)
self.assertFalse(task.hasStarted())
self.assertFalse(task.isRunning())
self.assertFalse(task.isDone())
task.start()
self.assertTrue(task.hasStarted())
self.assertTrue(task.isRunning())
task.join()
self.assertFalse(task.isRunning())
self.assertTrue(task.isDone())