[PATCH 6/4] threading: minor improvements
Nicolas Sebrecht
nicolas.s-dev at laposte.net
Tue May 17 02:57:04 BST 2016
Factorize string, enhance comments and minor code iomprovements.
Signed-off-by: Nicolas Sebrecht <nicolas.s-dev at laposte.net>
---
offlineimap/accounts.py | 5 +++--
offlineimap/folder/Base.py | 5 +++--
offlineimap/init.py | 22 ++++++++++++++++------
offlineimap/threadutil.py | 7 +++++--
4 files changed, 27 insertions(+), 12 deletions(-)
diff --git a/offlineimap/accounts.py b/offlineimap/accounts.py
index 5acd82a..3cf4769 100644
--- a/offlineimap/accounts.py
+++ b/offlineimap/accounts.py
@@ -351,11 +351,12 @@ class SyncableAccount(Account):
"[%s]"% (localfolder, localfolder.repository))
continue # Ignore filtered folder
if not globals.options.singlethreading:
- thread = InstanceLimitedThread(\
+ thread = InstanceLimitedThread(
instancename = 'FOLDER_' + self.remoterepos.getname(),
target = syncfolder,
name = "Folder %s [acc: %s]"% (remotefolder.getexplainedname(), self),
- args = (self, remotefolder, quick))
+ args = (self, remotefolder, quick)
+ )
thread.start()
folderthreads.append(thread)
else:
diff --git a/offlineimap/folder/Base.py b/offlineimap/folder/Base.py
index 1bed3bf..a41566d 100644
--- a/offlineimap/folder/Base.py
+++ b/offlineimap/folder/Base.py
@@ -871,11 +871,12 @@ class BaseFolder(object):
# exceptions are caught in copymessageto()
if self.suggeststhreads() and not globals.options.singlethreading:
self.waitforthread()
- thread = threadutil.InstanceLimitedThread(\
+ thread = threadutil.InstanceLimitedThread(
self.getcopyinstancelimit(),
target = self.copymessageto,
name = "Copy message from %s:%s" % (self.repository, self),
- args = (uid, dstfolder, statusfolder))
+ args = (uid, dstfolder, statusfolder)
+ )
thread.start()
threads.append(thread)
else:
diff --git a/offlineimap/init.py b/offlineimap/init.py
index b04c9db..81d0c33 100644
--- a/offlineimap/init.py
+++ b/offlineimap/init.py
@@ -35,6 +35,7 @@ from offlineimap.repository import Repository
import traceback
import collections
+ACCOUNT_LIMITED_THREAD_NAME = 'MAX_ACCOUNTS'
def syncitall(list_accounts, config):
"""The target when in multithreading mode for running accounts threads."""
@@ -44,7 +45,7 @@ def syncitall(list_accounts, config):
# Start a new thread per account and store it in the collection.
account = accounts.SyncableAccount(config, accountname)
thread = threadutil.InstanceLimitedThread(
- instancename = 'ACCOUNTLIMIT',
+ instancename = ACCOUNT_LIMITED_THREAD_NAME,
target = account.syncrunner,
name = "Account sync %s"% accountname
)
@@ -287,18 +288,27 @@ class OfflineImap:
if socktimeout > 0:
socket.setdefaulttimeout(socktimeout)
- threadutil.initInstanceLimit('ACCOUNTLIMIT',
- config.getdefaultint('general', 'maxsyncaccounts', 1))
+ threadutil.initInstanceLimit(
+ ACCOUNT_LIMITED_THREAD_NAME,
+ config.getdefaultint('general', 'maxsyncaccounts', 1)
+ )
for reposname in config.getsectionlist('Repository'):
+ # XXX: We are likely lying around. If we must use at most n
+ # connections for a remote IMAP server, why do we allow twice this
+ # number? The max connections number is used by both the FOLDER_ and
+ # the MSGCOPY_ prefixes!
for instancename in ["FOLDER_" + reposname,
"MSGCOPY_" + reposname]:
if options.singlethreading:
threadutil.initInstanceLimit(instancename, 1)
else:
- threadutil.initInstanceLimit(instancename,
- config.getdefaultint('Repository ' + reposname,
- 'maxconnections', 2))
+ threadutil.initInstanceLimit(
+ instancename,
+ config.getdefaultint(
+ 'Repository ' + reposname,
+ 'maxconnections', 2)
+ )
self.config = config
return (options, args)
diff --git a/offlineimap/threadutil.py b/offlineimap/threadutil.py
index 894fd15..1802053 100644
--- a/offlineimap/threadutil.py
+++ b/offlineimap/threadutil.py
@@ -224,8 +224,10 @@ class ExitNotifyThread(Thread):
instancelimitedsems = {}
def initInstanceLimit(instancename, instancemax):
- """Initialize the instance-limited thread implementation to permit
- up to intancemax threads with the given instancename."""
+ """Initialize the instance-limited thread implementation.
+
+ Run up to intancemax threads for the given instancename. This allows
+ to honor maxsyncaccounts and maxconnections."""
global instancelimitedsems
@@ -235,6 +237,7 @@ def initInstanceLimit(instancename, instancemax):
class InstanceLimitedThread(ExitNotifyThread):
def __init__(self, instancename, *args, **kwargs):
+ # XXX: this is not a instance name, is it?
self.instancename = instancename
super(InstanceLimitedThread, self).__init__(*args, **kwargs)
--
2.7.4
More information about the OfflineIMAP-project
mailing list