From d0d390d5e771f6f0804355fd47f4b406f865534c Mon Sep 17 00:00:00 2001 From: Kliment Yanev Date: Sun, 25 Mar 2018 20:08:05 +0200 Subject: [PATCH 1/2] Switch to _sendnext for send_now commands --- printrun/printcore.py | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/printrun/printcore.py b/printrun/printcore.py index e87a5ac34..826e88fb5 100644 --- a/printrun/printcore.py +++ b/printrun/printcore.py @@ -389,14 +389,14 @@ def _stop_sender(self): self.send_thread = None def _sender(self): + if not self.paused: + self.lineno = 0 + self._send("M110", -1, True) while not self.stop_send_thread: - try: - command = self.priqueue.get(True, 0.1) - except QueueEmpty: - continue while self.printer and self.printing and not self.clear: time.sleep(0.001) - self._send(command) + if not(self.priqueue.empty()): + self._sendnext(now=True) while self.printer and self.printing and not self.clear: time.sleep(0.001) @@ -565,16 +565,16 @@ def process_host_command(self, command): if command.startswith(";@pause"): self.pause() - def _sendnext(self): + def _sendnext(self, now=False): if not self.printer: return - while self.printer and self.printing and not self.clear: + while self.printer and (self.printing or now) and not self.clear: time.sleep(0.001) # Only wait for oks when using serial connections or when not using tcp # in streaming mode if not self.printer_tcp or not self.tcp_streaming_mode: self.clear = False - if not (self.printing and self.printer and self.online): + if not ((self.printing or now) and self.printer and self.online): self.clear = True return if self.resendfrom < self.lineno and self.resendfrom > -1: @@ -583,7 +583,8 @@ def _sendnext(self): return self.resendfrom = -1 if not self.priqueue.empty(): - self._send(self.priqueue.get_nowait()) + self._send(self.priqueue.get_nowait(),self.lineno, True) + self.lineno += 1 self.priqueue.task_done() return if self.printing and self.queueindex < len(self.mainqueue): @@ -636,12 +637,13 @@ def _sendnext(self): self.clear = True self.queueindex += 1 else: - self.printing = False - self.clear = True - if not self.paused: - self.queueindex = 0 - self.lineno = 0 - self._send("M110", -1, True) + if not now: + self.printing = False + self.clear = True + if not self.paused: + self.queueindex = 0 + self.lineno = 0 + self._send("M110", -1, True) def _send(self, command, lineno = 0, calcchecksum = False): # Only add checksums if over serial (tcp does the flow control itself) From a8fbd40da3f9815c71b2bfd7c20409d855bdee6e Mon Sep 17 00:00:00 2001 From: Kliment Yanev Date: Sun, 25 Mar 2018 20:16:44 +0200 Subject: [PATCH 2/2] Reduce cpu usage while idling in send --- printrun/printcore.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/printrun/printcore.py b/printrun/printcore.py index 826e88fb5..5b9334703 100644 --- a/printrun/printcore.py +++ b/printrun/printcore.py @@ -397,6 +397,8 @@ def _sender(self): time.sleep(0.001) if not(self.priqueue.empty()): self._sendnext(now=True) + else: + time.sleep(0.1) while self.printer and self.printing and not self.clear: time.sleep(0.001)