branch: externals/el-job
commit ffb216b52dfeb6ecaa826ec0affe4fac99edb4e1
Author: Martin Edström <meedstro...@gmail.com>
Commit: Martin Edström <meedstro...@gmail.com>

    Don't record cores-to-use in struct, always use max
---
 el-job.el | 35 +++++++++++------------------------
 1 file changed, 11 insertions(+), 24 deletions(-)

diff --git a/el-job.el b/el-job.el
index 9eef61696c..6bccf0f4ea 100644
--- a/el-job.el
+++ b/el-job.el
@@ -294,7 +294,6 @@ with one character of your choosing, such as a dot."
                       (:copier nil)
                       (:conc-name el-job:))
   id
-  (cores-to-use 1)
   callback
   (ready nil :documentation "Processes ready for input.")
   (busy nil :documentation "Processes that have not yet returned output.")
@@ -416,9 +415,7 @@ still at work.  IF-BUSY may take on one of three symbols:
   (if (null id)
       (let* ((inputs (if (functionp inputs) (funcall inputs) inputs))
              (anonymous-job
-              (el-job--make :cores-to-use (min (length inputs)
-                                               (max 1 (1- (num-processors))))
-                            :callback callback
+              (el-job--make :callback callback
                             :queued-inputs inputs)))
         (el-job--spawn-processes anonymous-job
                                  load-features
@@ -429,11 +426,12 @@ still at work.  IF-BUSY may take on one of three symbols:
                    (puthash id (el-job--make :id id) el-jobs)))
           (do-respawn nil)
           (do-exec nil))
-      (el-job--with job ( .queued-inputs .busy .ready .cores-to-use
+      (el-job--with job ( .queued-inputs .busy .ready
                           .spawn-args .callback .timestamps )
         (unless (and .busy (eq if-busy 'noop))
           (plist-put .timestamps :launched (current-time))
           ;; TODO: Can we somehow defer this to even later?
+          ;; Maybe if 'wait, don't funcall.
           (when (functionp inputs)
             (setq inputs (funcall inputs)))
           (if .busy
@@ -446,38 +444,27 @@ still at work.  IF-BUSY may take on one of three symbols:
             (setq do-exec t))
           (when do-exec
             (setf .callback callback)
-            (setf .cores-to-use
-                  ;; FIXME: What if length of inputs has shrunk?
-                  ;; what happens when it list of 3 inputs is split by 7 cores?
-                  ;; If we decide we dont need to remember the N of cores from 
before,
-                  ;; taking the N of ready processes as good so long as it's 
not less than inputs,
-                  ;; then we could remove the .cores-to-use field.
-                  (min (max .cores-to-use (length .queued-inputs))
-                       (max 1 (1- (num-processors)))))
-            (unless (and (= .cores-to-use (+ (length .busy) (length .ready)))
-                         (seq-every-p #'process-live-p .ready)
-                         (seq-every-p #'process-live-p .busy)) ; uhh
+            (unless (seq-every-p #'process-live-p .ready)
               (setq do-respawn t))
             (let ((new-spawn-args (list job
                                         load-features
                                         inject-vars
                                         funcall-per-input)))
-              (unless (eq (sxhash (cdr .spawn-args))
-                          (sxhash (cdr new-spawn-args)))
+              (unless (= (sxhash (cdr .spawn-args))
+                         (sxhash (cdr new-spawn-args)))
                 (setf .spawn-args new-spawn-args)
                 (el-job--dbg 2 "New arguments, resetting processes for %s" id)
                 (setq do-respawn t)))
             (when do-respawn
               (el-job--disable job)
               (apply #'el-job--spawn-processes .spawn-args))
-            (el-job--exec-pending-workload job)
-            t))))))
+            (el-job--exec-pending-workload job)))))))
 
 (defvar-local el-job-here nil)
 (defun el-job--spawn-processes (job load-features inject-vars 
funcall-per-input)
   "Spin up processes for JOB, standing by for input.
 For the rest of the arguments, see `el-job-launch'."
-  (el-job--with job (.stderr .id .cores-to-use .ready .spawn-args)
+  (el-job--with job (.stderr .id .ready .spawn-args)
     (let* ((print-length nil)
            (print-level nil)
            (print-circle t)
@@ -508,7 +495,7 @@ For the rest of the arguments, see `el-job-launch'."
               (erase-buffer)
               (current-buffer)))
       (condition-case err
-          (dotimes (i .cores-to-use)
+          (dotimes (i (max 1 (1- (num-processors))))
             (let ((proc (make-process
                          :name (format "el-job:%s:%d" ident i)
                          :noquery t
@@ -541,14 +528,14 @@ This puts them to work.  Each successful child will print 
output
 \(even nil output) to its associated process buffer, whereupon something
 should trigger `el-job--handle-output'."
   (el-job--with job
-      ( .ready .busy .input-sets .result-sets .queued-inputs .cores-to-use
+      ( .ready .busy .input-sets .result-sets .queued-inputs
         .past-elapsed .timestamps .finish-times .id .stderr .poll-timer )
     (cancel-timer .poll-timer)
     (setf .input-sets nil)
     (setf .result-sets nil)
     (setf .finish-times nil)
     (let ((splits (el-job--split-optimally .queued-inputs
-                                           .cores-to-use
+                                           (max 1 (1- (num-processors)))
                                            .past-elapsed))
           busy-bufs)
       (unless (length< splits (1+ (length .ready)))

Reply via email to