diff options
author | Stefan Israelsson Tampe <stefan.itampe@gmail.com> | 2018-03-26 15:56:28 +0200 |
---|---|---|
committer | Stefan Israelsson Tampe <stefan.itampe@gmail.com> | 2018-03-26 15:56:28 +0200 |
commit | 1c4e6def8285e0740461b732c78c74ed3345f524 (patch) | |
tree | 91fc9890421952804b5737a15bee4d34bafa1167 /modules/language/python/module/threading.scm | |
parent | 29e4d11cc8ce55c3ac8900ea5c93179c28d31ab4 (diff) |
functools feature complete
Diffstat (limited to 'modules/language/python/module/threading.scm')
-rw-r--r-- | modules/language/python/module/threading.scm | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/modules/language/python/module/threading.scm b/modules/language/python/module/threading.scm new file mode 100644 index 0000000..b4d43c2 --- /dev/null +++ b/modules/language/python/module/threading.scm @@ -0,0 +1,36 @@ +(define-module (language python module threading) + #:use-module (ice-9 threads) + #:use-module (oop pf-objects) + #:use-module (language python def) + #:export (RLock)) + +(define-python-class RLock + (define __init__ + (lambda (self) + (set self '_lock (make-mutex 'recursive)))) + + (define __enter__ + (lambda (self) + (lock-mutex (ref self '_lock)))) + + (define __leave__ + (lambda (self) + (unlock-mutex (ref self '_lock)))) + + + (define acquire + (lam (self (= blocking #t) (timeout -1)) + (if blocking + (if (< timeout 0) + (lock-mutex (ref self '_lock)) + (let* ((cur (gettimeofday)) + (x (+ (car cur) (/ (cdr cur) 1000000.0))) + (y (+ x timeout)) + (s (floor y)) + (us (floor (* (- y s) 1000000)))) + (lock-mutex (ref self '_lock) (cons s us)))) + (try-lock (ref self '_lock))))) + + (define release __leave__)) + + |