mirror of
https://github.com/OPM/ResInsight.git
synced 2026-10-14 17:32:13 -05:00
To include phase split well connection rates and some summary intersect support. Supposedly Final update before release.
102 lines
2.2 KiB
Python
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())
|
|
|