mirror of
https://github.com/logos-storage/apatheia.git
synced 2026-01-05 22:43:10 +00:00
trying to setup a jobs flag
This commit is contained in:
parent
2de80356b2
commit
dca235f469
@ -9,7 +9,7 @@ srcDir = "src"
|
|||||||
# Dependencies
|
# Dependencies
|
||||||
|
|
||||||
requires "chronos >= 4.0.0"
|
requires "chronos >= 4.0.0"
|
||||||
requires "threading"
|
requires "threading#head"
|
||||||
requires "taskpools >= 0.0.5"
|
requires "taskpools >= 0.0.5"
|
||||||
requires "chronicles"
|
requires "chronicles"
|
||||||
|
|
||||||
|
|||||||
@ -61,6 +61,11 @@ template toOpenArray*[T](arr: OpenArrayHolder[T]): auto =
|
|||||||
func jobId*[T](fut: Future[T]): JobId =
|
func jobId*[T](fut: Future[T]): JobId =
|
||||||
JobId fut.id()
|
JobId fut.id()
|
||||||
|
|
||||||
|
proc cancelled*[T](jobResult: JobResult[T]): bool =
|
||||||
|
# acquire jobResult.flags[].lock
|
||||||
|
# result = jobResult.flags[].isCancelled
|
||||||
|
discard
|
||||||
|
|
||||||
proc processJobs*[T](jobs: JobQueue[T]) {.async.} =
|
proc processJobs*[T](jobs: JobQueue[T]) {.async.} =
|
||||||
## Starts a "detached" async processor for a given job queue.
|
## Starts a "detached" async processor for a given job queue.
|
||||||
##
|
##
|
||||||
@ -87,6 +92,7 @@ proc createFuture*[T](jobs: JobQueue[T], name: static string): (JobResult[T], Fu
|
|||||||
let fut = newFuture[T](name)
|
let fut = newFuture[T](name)
|
||||||
let id = fut.jobId()
|
let id = fut.jobId()
|
||||||
let flags = newSharedPtr(JobFlags)
|
let flags = newSharedPtr(JobFlags)
|
||||||
|
flags[].lock.initLock()
|
||||||
jobs.futures[id] = (fut, flags)
|
jobs.futures[id] = (fut, flags)
|
||||||
trace "job added: ", numberJobs = jobs.futures.len()
|
trace "job added: ", numberJobs = jobs.futures.len()
|
||||||
return (JobResult[T](id: id, queue: jobs.queue, flags: flags), fut)
|
return (JobResult[T](id: id, queue: jobs.queue, flags: flags), fut)
|
||||||
|
|||||||
@ -34,6 +34,17 @@ proc strCompute(jobResult: JobResult[int], vals: OpenArrayHolder[char]) =
|
|||||||
proc addStrings(jobResult: JobResult[float], vals: OpenArrayHolder[string]) =
|
proc addStrings(jobResult: JobResult[float], vals: OpenArrayHolder[string]) =
|
||||||
discard
|
discard
|
||||||
|
|
||||||
|
proc cancelTest(jobResult: JobResult[float], base: float, vals: OpenArrayHolder[float]) =
|
||||||
|
os.sleep(300)
|
||||||
|
if jobResult.cancelled():
|
||||||
|
discard
|
||||||
|
# discard jobResult.queue.send((jobResult.id, res,))
|
||||||
|
|
||||||
|
var res = base
|
||||||
|
for x in vals.toOpenArray():
|
||||||
|
res += x
|
||||||
|
discard jobResult.queue.send((jobResult.id, res,))
|
||||||
|
|
||||||
suite "async tests":
|
suite "async tests":
|
||||||
|
|
||||||
var tp = Taskpool.new(num_threads = 2) # Default to the number of hardware threads.
|
var tp = Taskpool.new(num_threads = 2) # Default to the number of hardware threads.
|
||||||
@ -75,3 +86,8 @@ suite "async tests":
|
|||||||
var jobs = newJobQueue[float](taskpool = tp)
|
var jobs = newJobQueue[float](taskpool = tp)
|
||||||
let job = jobs.submit(addStrings(@["a", "b", "c"]))
|
let job = jobs.submit(addStrings(@["a", "b", "c"]))
|
||||||
)
|
)
|
||||||
|
|
||||||
|
asyncTest "testing cancel":
|
||||||
|
var jobs = newJobQueue[float](taskpool = tp)
|
||||||
|
let res = await jobs.submit(addNumValues(10.0, @[1.0.float, 2.0]))
|
||||||
|
check res == 13.0
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user