Implement #3447 (Option to limit parallel processes)

This commit is contained in:
Kovid Goyal 2009-09-10 21:29:55 -06:00
parent b36808c1fc
commit 6fea6a8fa7
7 changed files with 170 additions and 158 deletions

View File

@ -83,6 +83,8 @@ def _config():
help='Search history for the LRF viewer') help='Search history for the LRF viewer')
c.add_opt('scheduler_search_history', default=[], c.add_opt('scheduler_search_history', default=[],
help='Search history for the recipe scheduler') help='Search history for the recipe scheduler')
c.add_opt('worker_limit', default=6,
help=_('Maximum number of waiting worker processes'))
return ConfigProxy(c) return ConfigProxy(c)

View File

@ -457,6 +457,7 @@ class ConfigDialog(QDialog, Ui_Dialog):
self.connect(self.sync_news, SIGNAL('toggled(bool)'), self.connect(self.sync_news, SIGNAL('toggled(bool)'),
self.delete_news.setEnabled) self.delete_news.setEnabled)
self.setup_conversion_options() self.setup_conversion_options()
self.opt_worker_limit.setValue(config['worker_limit'])
def create_symlinks(self): def create_symlinks(self):
from calibre.utils.osx_symlinks import create_symlinks from calibre.utils.osx_symlinks import create_symlinks
@ -696,6 +697,12 @@ class ConfigDialog(QDialog, Ui_Dialog):
return return
if not self.add_save.save_settings(): if not self.add_save.save_settings():
return return
wl = self.opt_worker_limit.value()
if wl%2 != 0:
wl += 1
config['worker_limit'] = wl
config['use_roman_numerals_for_series_number'] = bool(self.roman_numerals.isChecked()) config['use_roman_numerals_for_series_number'] = bool(self.roman_numerals.isChecked())
config['new_version_notification'] = bool(self.new_version_notification.isChecked()) config['new_version_notification'] = bool(self.new_version_notification.isChecked())
prefs['network_timeout'] = int(self.timeout.value()) prefs['network_timeout'] = int(self.timeout.value())

View File

@ -682,50 +682,43 @@
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="page_2"> <widget class="QWidget" name="page_2">
<layout class="QHBoxLayout" name="horizontalLayout_9"> <layout class="QGridLayout" name="gridLayout_3">
<item> <item row="0" column="0">
<spacer> <widget class="QLabel" name="label_5">
<property name="orientation"> <property name="text">
<enum>Qt::Horizontal</enum> <string>&amp;Maximum number of waiting worker processes (needs restart):</string>
</property> </property>
<property name="sizeHint" stdset="0"> <property name="buddy">
<size> <cstring>opt_worker_limit</cstring>
<width>154</width>
<height>20</height>
</size>
</property> </property>
</spacer> </widget>
</item> </item>
<item> <item row="0" column="1">
<layout class="QVBoxLayout" name="verticalLayout_12"> <widget class="QSpinBox" name="opt_worker_limit">
<item> <property name="minimum">
<widget class="QPushButton" name="compact_button"> <number>2</number>
<property name="text"> </property>
<string>&amp;Check database integrity</string> <property name="maximum">
</property> <number>10000</number>
</widget> </property>
</item> <property name="singleStep">
<item> <number>2</number>
<widget class="QPushButton" name="button_osx_symlinks"> </property>
<property name="text"> </widget>
<string>&amp;Install command line tools</string>
</property>
</widget>
</item>
</layout>
</item> </item>
<item> <item row="1" column="0" colspan="2">
<spacer> <widget class="QPushButton" name="compact_button">
<property name="orientation"> <property name="text">
<enum>Qt::Horizontal</enum> <string>&amp;Check database integrity</string>
</property> </property>
<property name="sizeHint" stdset="0"> </widget>
<size> </item>
<width>153</width> <item row="2" column="0" colspan="2">
<height>20</height> <widget class="QPushButton" name="button_osx_symlinks">
</size> <property name="text">
<string>&amp;Install command line tools</string>
</property> </property>
</spacer> </widget>
</item> </item>
</layout> </layout>
</widget> </widget>

View File

@ -15,7 +15,7 @@ from PyQt4.Qt import QAbstractTableModel, QVariant, QModelIndex, Qt, \
from calibre.utils.ipc.server import Server from calibre.utils.ipc.server import Server
from calibre.utils.ipc.job import ParallelJob from calibre.utils.ipc.job import ParallelJob
from calibre.gui2 import Dispatcher, error_dialog, NONE from calibre.gui2 import Dispatcher, error_dialog, NONE, config
from calibre.gui2.device import DeviceJob from calibre.gui2.device import DeviceJob
from calibre.gui2.dialogs.jobs_ui import Ui_JobsDialog from calibre.gui2.dialogs.jobs_ui import Ui_JobsDialog
from calibre import __appname__ from calibre import __appname__
@ -31,7 +31,7 @@ class JobManager(QAbstractTableModel):
self.jobs = [] self.jobs = []
self.add_job = Dispatcher(self._add_job) self.add_job = Dispatcher(self._add_job)
self.server = Server() self.server = Server(limit=int(config['worker_limit']/2.0))
self.changed_queue = Queue() self.changed_queue = Queue()
self.timer = QTimer(self) self.timer = QTimer(self)

View File

@ -530,7 +530,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
self._sync_menu.trigger_default) self._sync_menu.trigger_default)
def add_spare_server(self, *args): def add_spare_server(self, *args):
self.spare_servers.append(Server()) self.spare_servers.append(Server(limit=int(config['worker_limit']/2.0)))
@property @property
def spare_server(self): def spare_server(self):

View File

@ -5,8 +5,8 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: calibre 0.6.11\n" "Project-Id-Version: calibre 0.6.11\n"
"POT-Creation-Date: 2009-09-10 20:58+MDT\n" "POT-Creation-Date: 2009-09-10 21:29+MDT\n"
"PO-Revision-Date: 2009-09-10 20:58+MDT\n" "PO-Revision-Date: 2009-09-10 21:29+MDT\n"
"Last-Translator: Automatically generated\n" "Last-Translator: Automatically generated\n"
"Language-Team: LANGUAGE\n" "Language-Team: LANGUAGE\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -94,8 +94,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:29 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:29
#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:139 #: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:139
#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:141 #: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:141
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:261 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:263
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:268 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:270
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:111 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:111
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:118 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:118
#: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:21 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:21
@ -1848,7 +1848,7 @@ msgid "Add a tab at the beginning of each paragraph."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:27 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:27
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:505 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:508
msgid "Frequently used directories" msgid "Frequently used directories"
msgstr "" msgstr ""
@ -1936,16 +1936,20 @@ msgstr ""
msgid "Default action to perform when send to device button is clicked" msgid "Default action to perform when send to device button is clicked"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:123 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:87
msgid "Maximum number of waiting worker processes"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:125
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:397 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:397
msgid "Copied" msgid "Copied"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:152 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:154
msgid "Copy" msgid "Copy"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:152 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:154
msgid "Copy to Clipboard" msgid "Copy to Clipboard"
msgstr "" msgstr ""
@ -2143,14 +2147,14 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:44 #: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:44
#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:61 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:61
#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:62 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:62
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:491 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:494
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:503 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:506
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:504
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:507 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:507
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:509 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:510
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:525 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:512
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:526 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:528
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:556 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:529
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:560
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:343 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:343
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:348 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:348
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:362 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:362
@ -3179,126 +3183,126 @@ msgstr ""
msgid "new email address" msgid "new email address"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:465 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:466
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:798 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:805
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:140 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:140
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1004 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:1004
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:52 #: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:52
msgid "Error" msgid "Error"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:467
msgid "Failed to install command line tools." msgid "Failed to install command line tools."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:469 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:470
msgid "Command line tools installed" msgid "Command line tools installed"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:470 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:471
msgid "Command line tools installed in" msgid "Command line tools installed in"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:471 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:472
msgid "If you move calibre.app, you have to re-install the command line tools." msgid "If you move calibre.app, you have to re-install the command line tools."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:522 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:523
msgid "No valid plugin path" msgid "No valid plugin path"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:523 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:524
msgid "%s is not a valid plugin path" msgid "%s is not a valid plugin path"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:526 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:527
msgid "Choose plugin" msgid "Choose plugin"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:538 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:539
msgid "Plugin cannot be disabled" msgid "Plugin cannot be disabled"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:539 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:540
msgid "The plugin: %s cannot be disabled" msgid "The plugin: %s cannot be disabled"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:548 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:549
msgid "Plugin not customizable" msgid "Plugin not customizable"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:549 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:550
msgid "Plugin: %s does not need customization" msgid "Plugin: %s does not need customization"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:573 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:574
msgid "Customize %s" msgid "Customize %s"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:583 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:584
msgid "Cannot remove builtin plugin" msgid "Cannot remove builtin plugin"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:584 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:585
msgid " cannot be removed. It is a builtin plugin. Try disabling it instead." msgid " cannot be removed. It is a builtin plugin. Try disabling it instead."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:617 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:618
msgid "Error log:" msgid "Error log:"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:624 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:625
msgid "Access log:" msgid "Access log:"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:649 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:650
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:573 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:573
msgid "Failed to start content server" msgid "Failed to start content server"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:673 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:674
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:470 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:470
msgid "Select location for books" msgid "Select location for books"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:690 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:691
msgid "Invalid size" msgid "Invalid size"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:691 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:692
msgid "The size %s is invalid. must be of the form widthxheight" msgid "The size %s is invalid. must be of the form widthxheight"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:735 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:742
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:740 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:747
msgid "Invalid database location" msgid "Invalid database location"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:736 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:743
msgid "Invalid database location " msgid "Invalid database location "
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:737 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:744
msgid "<br>Must be a directory." msgid "<br>Must be a directory."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:741 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:748
msgid "Invalid database location.<br>Cannot write to " msgid "Invalid database location.<br>Cannot write to "
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:779 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:786
msgid "Checking database integrity" msgid "Checking database integrity"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:799 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:806
msgid "Failed to check database integrity" msgid "Failed to check database integrity"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:804 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:811
msgid "Some inconsistencies found" msgid "Some inconsistencies found"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:805 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:812
msgid "The following books had formats listed in the database that are not actually available. The entries for the formats have been removed. You should check them manually. This can happen if you manipulate the files in the library folder directly." msgid "The following books had formats listed in the database that are not actually available. The entries for the formats have been removed. You should check them manually. This can happen if you manipulate the files in the library folder directly."
msgstr "" msgstr ""
@ -3382,256 +3386,260 @@ msgstr ""
msgid "&Saving books" msgid "&Saving books"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:488 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:491
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:367 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:367
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:173 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:173
msgid "Preferences" msgid "Preferences"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:489 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:492
msgid "&Location of ebooks (The ebooks are stored in folders sorted by author and metadata is stored in the file metadata.db)" msgid "&Location of ebooks (The ebooks are stored in folders sorted by author and metadata is stored in the file metadata.db)"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:490 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:493
msgid "Browse for the new database location" msgid "Browse for the new database location"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:492 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:495
msgid "Show notification when &new version is available" msgid "Show notification when &new version is available"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:493 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:496
msgid "Default network &timeout:" msgid "Default network &timeout:"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:494 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:497
msgid "Set the default timeout for network fetches (i.e. anytime we go out to the internet to get information)" msgid "Set the default timeout for network fetches (i.e. anytime we go out to the internet to get information)"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:495 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:498
msgid " seconds" msgid " seconds"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:496 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:499
msgid "Choose &language (requires restart):" msgid "Choose &language (requires restart):"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:497 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:500
msgid "Normal" msgid "Normal"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:498 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:501
msgid "High" msgid "High"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:499 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:502
msgid "Low" msgid "Low"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:500 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:503
msgid "Job &priority:" msgid "Job &priority:"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:501 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:504
msgid "Preferred &output format:" msgid "Preferred &output format:"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:502 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:505
msgid "Preferred &input format order:" msgid "Preferred &input format order:"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:506 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:509
msgid "Add a directory to the frequently used directories list" msgid "Add a directory to the frequently used directories list"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:508 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:511
msgid "Remove a directory from the frequently used directories list" msgid "Remove a directory from the frequently used directories list"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:510 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:513
msgid "Use &Roman numerals for series number" msgid "Use &Roman numerals for series number"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:511 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:514
msgid "Enable system &tray icon (needs restart)" msgid "Enable system &tray icon (needs restart)"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:512 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:515
msgid "Show &notifications in system tray" msgid "Show &notifications in system tray"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:513 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:516
msgid "Show cover &browser in a separate window (needs restart)" msgid "Show cover &browser in a separate window (needs restart)"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:514 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:517
msgid "Search as you type" msgid "Search as you type"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:515 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:518
msgid "Automatically send downloaded &news to ebook reader" msgid "Automatically send downloaded &news to ebook reader"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:516 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:519
msgid "&Delete news from library when it is automatically sent to reader" msgid "&Delete news from library when it is automatically sent to reader"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:517 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:520
msgid "&Number of covers to show in browse mode (needs restart):" msgid "&Number of covers to show in browse mode (needs restart):"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:518 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:521
msgid "Toolbar" msgid "Toolbar"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:519 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:522
msgid "Large" msgid "Large"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:520 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:523
msgid "Medium" msgid "Medium"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:521 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:524
msgid "Small" msgid "Small"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:522 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:525
msgid "&Button size in toolbar" msgid "&Button size in toolbar"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:523 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:526
msgid "Show &text in toolbar buttons" msgid "Show &text in toolbar buttons"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:524 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:527
msgid "Select visible &columns in library view" msgid "Select visible &columns in library view"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:530
msgid "Use internal &viewer for:" msgid "Use internal &viewer for:"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:528 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:531
msgid "Add an email address to which to send books" msgid "Add an email address to which to send books"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:529 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:532
msgid "&Add email" msgid "&Add email"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:530 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:533
msgid "Make &default" msgid "Make &default"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:531 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:534
msgid "&Remove email" msgid "&Remove email"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:532 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:535
msgid "calibre can send your books to you (or your reader) by email" msgid "calibre can send your books to you (or your reader) by email"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:533
msgid "&Check database integrity"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:534
msgid "&Install command line tools"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:535
msgid "calibre contains a network server that allows you to access your book collection using a browser from anywhere in the world. Any changes to the settings will only take effect after a server restart."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:536 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:536
msgid "Server &port:" msgid "&Maximum number of waiting worker processes (needs restart):"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:537 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:537
msgid "&Check database integrity"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:538
msgid "&Install command line tools"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:539
msgid "calibre contains a network server that allows you to access your book collection using a browser from anywhere in the world. Any changes to the settings will only take effect after a server restart."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:540
msgid "Server &port:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:541
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:58 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:58
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:178 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:178
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:117 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:117
msgid "&Username:" msgid "&Username:"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:538 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:542
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:59 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:59
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:179 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:179
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:119
msgid "&Password:" msgid "&Password:"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:539 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:543
msgid "If you leave the password blank, anyone will be able to access your book collection using the web interface." msgid "If you leave the password blank, anyone will be able to access your book collection using the web interface."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:540 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:544
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:60
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:180 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:180
msgid "&Show password" msgid "&Show password"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:541 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:545
msgid "The maximum size (widthxheight) for displayed covers. Larger covers are resized. " msgid "The maximum size (widthxheight) for displayed covers. Larger covers are resized. "
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:542 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:546
msgid "Max. &cover size:" msgid "Max. &cover size:"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:543 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:547
msgid "&Start Server" msgid "&Start Server"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:544 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:548
msgid "St&op Server" msgid "St&op Server"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:545 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:549
msgid "&Test Server" msgid "&Test Server"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:546 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:550
msgid "Run server &automatically on startup" msgid "Run server &automatically on startup"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:547 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:551
msgid "View &server logs" msgid "View &server logs"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:548 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:552
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/stanza_ui.py:46 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/stanza_ui.py:46
msgid "" msgid ""
"<p>Remember to leave calibre running as the server only runs as long as calibre is running.\n" "<p>Remember to leave calibre running as the server only runs as long as calibre is running.\n"
"<p>Stanza should see your calibre collection automatically. If not, try adding the URL http://myhostname:8080 as a new catalog in the Stanza reader on your iPhone. Here myhostname should be the fully qualified hostname or the IP address of the computer calibre is running on." "<p>Stanza should see your calibre collection automatically. If not, try adding the URL http://myhostname:8080 as a new catalog in the Stanza reader on your iPhone. Here myhostname should be the fully qualified hostname or the IP address of the computer calibre is running on."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:550 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:554
msgid "Here you can customize the behavior of Calibre by controlling what plugins it uses." msgid "Here you can customize the behavior of Calibre by controlling what plugins it uses."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:551 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:555
msgid "Enable/&Disable plugin" msgid "Enable/&Disable plugin"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:552 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:556
msgid "&Customize plugin" msgid "&Customize plugin"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:553 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:557
msgid "&Remove plugin" msgid "&Remove plugin"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:554 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:558
msgid "Add new plugin" msgid "Add new plugin"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:555 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:559
msgid "Plugin &file:" msgid "Plugin &file:"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:557 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:561
msgid "&Add" msgid "&Add"
msgstr "" msgstr ""

View File

@ -6,7 +6,7 @@ __license__ = 'GPL v3'
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>' __copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import os, cPickle, time, tempfile import sys, os, cPickle, time, tempfile
from math import ceil from math import ceil
from threading import Thread, RLock from threading import Thread, RLock
from Queue import Queue, Empty from Queue import Queue, Empty
@ -83,14 +83,16 @@ class CriticalError(Exception):
class Server(Thread): class Server(Thread):
def __init__(self, notify_on_job_done=lambda x: x, pool_size=None): def __init__(self, notify_on_job_done=lambda x: x, pool_size=None,
limit=sys.maxint):
Thread.__init__(self) Thread.__init__(self)
self.daemon = True self.daemon = True
global _counter global _counter
self.id = _counter+1 self.id = _counter+1
_counter += 1 _counter += 1
self.pool_size = cpu_count() if pool_size is None else pool_size limit = min(limit, cpu_count())
self.pool_size = limit if pool_size is None else pool_size
self.notify_on_job_done = notify_on_job_done self.notify_on_job_done = notify_on_job_done
self.auth_key = os.urandom(32) self.auth_key = os.urandom(32)
self.address = arbitrary_address('AF_PIPE' if iswindows else 'AF_UNIX') self.address = arbitrary_address('AF_PIPE' if iswindows else 'AF_UNIX')