소스 검색

- increased the number of workers in FlatCAM and made the number of workers customizable from Preferences

Marius Stanciu 6 년 전
부모
커밋
b7fce74ca3
5개의 변경된 파일46개의 추가작업 그리고 4개의 파일을 삭제
  1. 6 1
      FlatCAMApp.py
  2. 2 2
      FlatCAMWorkerStack.py
  3. 1 0
      README.md
  4. 21 0
      flatcamGUI/FlatCAMGUI.py
  5. 16 1
      flatcamGUI/GUIElements.py

+ 6 - 1
FlatCAMApp.py

@@ -319,6 +319,7 @@ class App(QtCore.QObject):
             "global_project_at_startup": self.ui.general_defaults_form.general_app_group.project_startup_cb,
             "global_project_autohide": self.ui.general_defaults_form.general_app_group.project_autohide_cb,
             "global_toggle_tooltips": self.ui.general_defaults_form.general_app_group.toggle_tooltips_cb,
+            "global_worker_number": self.ui.general_defaults_form.general_app_group.worker_number_sb,
 
             "global_compression_level": self.ui.general_defaults_form.general_app_group.compress_combo,
             "global_save_compressed": self.ui.general_defaults_form.general_app_group.save_type_cb,
@@ -586,6 +587,7 @@ class App(QtCore.QObject):
             "global_project_at_startup": False,
             "global_project_autohide": True,
             "global_toggle_tooltips": True,
+            "global_worker_number": 2,
             "global_compression_level": 3,
             "global_save_compressed": True,
 
@@ -1221,7 +1223,10 @@ class App(QtCore.QObject):
         self.log.debug("Finished adding Geometry and Excellon Editor's.")
 
         #### Worker ####
-        self.workers = WorkerStack()
+        if self.defaults["global_worker_number"]:
+            self.workers = WorkerStack(workers_number=int(self.defaults["global_worker_number"]))
+        else:
+            self.workers = WorkerStack(workers_number=2)
         self.worker_task.connect(self.workers.add_task)
 
 

+ 2 - 2
FlatCAMWorkerStack.py

@@ -8,7 +8,7 @@ class WorkerStack(QtCore.QObject):
     worker_task = QtCore.pyqtSignal(dict)               # 'worker_name', 'func', 'params'
     thread_exception = QtCore.pyqtSignal(object)
 
-    def __init__(self):
+    def __init__(self, workers_number):
         super(WorkerStack, self).__init__()
 
         self.workers = []
@@ -16,7 +16,7 @@ class WorkerStack(QtCore.QObject):
         self.load = {}                                  # {'worker_name': tasks_count}
 
         # Create workers crew
-        for i in range(0, 2):
+        for i in range(0, workers_number):
             worker = Worker(self, 'Slogger-' + str(i))
             thread = QtCore.QThread()
 

+ 1 - 0
README.md

@@ -13,6 +13,7 @@ CAD program, and create G-Code for Isolation routing.
 
 - Gerber Editor: made geometry transfer (which is slow) to Editor to be multithreaded
 - Gerber Editor: plotting process is showed in the status bar
+- increased the number of workers in FlatCAM and made the number of workers customizable from Preferences
 
 4.04.2019
 

+ 21 - 0
flatcamGUI/FlatCAMGUI.py

@@ -3519,6 +3519,25 @@ class GeneralAppPrefGroupUI(OptionsGroupUI):
            _( "Check this box if you want to have toolTips displayed\n"
             "when hovering with mouse over items throughout the App.")
         )
+        self.worker_number_label = QtWidgets.QLabel(_('Workers number:'))
+        self.worker_number_label.setToolTip(
+            _("The number of Qthreads made available to the App.\n"
+              "A bigger number may finish the jobs more quickly but\n"
+              "depending on your computer speed, may make the App\n"
+              "unresponsive. Can have a value between 2 and 16.\n"
+              "Default value is 2.\n"
+              "After change, it will be applied at next App start.")
+        )
+        self.worker_number_sb = FCSpinner()
+        self.worker_number_sb.setToolTip(
+            _("The number of Qthreads made available to the App.\n"
+              "A bigger number may finish the jobs more quickly but\n"
+              "depending on your computer speed, may make the App\n"
+              "unresponsive. Can have a value between 2 and 16.\n"
+              "Default value is 2.\n"
+              "After change, it will be applied at next App start.")
+        )
+        self.worker_number_sb.set_range(2, 16)
 
         # Just to add empty rows
         self.spacelabel = QtWidgets.QLabel('')
@@ -3539,6 +3558,8 @@ class GeneralAppPrefGroupUI(OptionsGroupUI):
         self.form_box.addRow(self.project_startup_label, self.project_startup_cb)
         self.form_box.addRow(self.project_autohide_label, self.project_autohide_cb)
         self.form_box.addRow(self.toggle_tooltips_label, self.toggle_tooltips_cb)
+        self.form_box.addRow(self.worker_number_label, self.worker_number_sb)
+
         self.form_box.addRow(self.spacelabel, self.spacelabel)
 
         # Add the QFormLayout that holds the Application general defaults

+ 16 - 1
flatcamGUI/GUIElements.py

@@ -1382,6 +1382,18 @@ class SpinBoxDelegate(QtWidgets.QItemDelegate):
 class FCSpinner(QtWidgets.QSpinBox):
     def __init__(self, parent=None):
         super(FCSpinner, self).__init__(parent)
+        self.readyToEdit = True
+
+    def mousePressEvent(self, e, parent=None):
+        super(FCSpinner, self).mousePressEvent(e)  # required to deselect on 2e click
+        if self.readyToEdit:
+            self.lineEdit().selectAll()
+            self.readyToEdit = False
+
+    def focusOutEvent(self, e):
+        super(FCSpinner, self).focusOutEvent(e)  # required to remove cursor on focusOut
+        self.lineEdit().deselect()
+        self.readyToEdit = True
 
     def get_value(self):
         return str(self.value())
@@ -1394,6 +1406,9 @@ class FCSpinner(QtWidgets.QSpinBox):
             return
         self.setValue(k)
 
+    def set_range(self, min_val, max_val):
+        self.setRange(min_val, max_val)
+
     # def sizeHint(self):
     #     default_hint_size = super(FCSpinner, self).sizeHint()
     #     return QtCore.QSize(EDIT_SIZE_HINT, default_hint_size.height())
@@ -1430,7 +1445,7 @@ class FCDoubleSpinner(QtWidgets.QDoubleSpinBox):
         self.setDecimals(val)
 
     def set_range(self, min_val, max_val):
-        self.setRange(self, min_val, max_val)
+        self.setRange(min_val, max_val)
 
 
 class Dialog_box(QtWidgets.QWidget):