[PATCH 1/3] threading: improve variable names and factorize code
Nicolas Sebrecht
nicolas.s-dev at laposte.net
Wed May 18 03:13:01 BST 2016
Signed-off-by: Nicolas Sebrecht <nicolas.s-dev at laposte.net>
---
offlineimap/accounts.py | 8 ++++++--
offlineimap/folder/Base.py | 4 ++--
offlineimap/folder/IMAP.py | 5 +++--
offlineimap/init.py | 7 ++++---
offlineimap/threadutil.py | 28 ++++++++++++++--------------
5 files changed, 29 insertions(+), 23 deletions(-)
diff --git a/offlineimap/accounts.py b/offlineimap/accounts.py
index c9b6dbc..abdbe8c 100644
--- a/offlineimap/accounts.py
+++ b/offlineimap/accounts.py
@@ -29,6 +29,8 @@ from offlineimap.threadutil import InstanceLimitedThread
import six
+FOLDER_NAMESPACE = 'LIMITED_FOLDER_'
+
try:
import fcntl
except:
@@ -354,9 +356,11 @@ class SyncableAccount(Account):
continue # Ignore filtered folder
if not globals.options.singlethreading:
thread = InstanceLimitedThread(
- instancename = 'FOLDER_' + self.remoterepos.getname(),
+ limitNamespace = "%s%s"% (
+ FOLDER_NAMESPACE, self.remoterepos.getname()),
target = syncfolder,
- name = "Folder %s [acc: %s]"% (remotefolder.getexplainedname(), self),
+ name = "Folder %s [acc: %s]"% (
+ remotefolder.getexplainedname(), self),
args = (self, remotefolder, quick)
)
thread.start()
diff --git a/offlineimap/folder/Base.py b/offlineimap/folder/Base.py
index a41566d..8b7242b 100644
--- a/offlineimap/folder/Base.py
+++ b/offlineimap/folder/Base.py
@@ -134,7 +134,7 @@ class BaseFolder(object):
return True
- def getcopyinstancelimit(self):
+ def getinstancelimitnamespace(self):
"""For threading folders, returns the instancelimitname for
InstanceLimitedThreads."""
@@ -872,7 +872,7 @@ class BaseFolder(object):
if self.suggeststhreads() and not globals.options.singlethreading:
self.waitforthread()
thread = threadutil.InstanceLimitedThread(
- self.getcopyinstancelimit(),
+ self.getinstancelimitnamespace(),
target = self.copymessageto,
name = "Copy message from %s:%s" % (self.repository, self),
args = (uid, dstfolder, statusfolder)
diff --git a/offlineimap/folder/IMAP.py b/offlineimap/folder/IMAP.py
index aa59954..bc02b60 100644
--- a/offlineimap/folder/IMAP.py
+++ b/offlineimap/folder/IMAP.py
@@ -32,6 +32,7 @@ import six
# Globals
CRLF = '\r\n'
+MSGCOPY_NAMESPACE = 'MSGCOPY_'
# NB: message returned from getmessage() will have '\n' all over the place,
@@ -88,8 +89,8 @@ class IMAPFolder(BaseFolder):
OfflineImapError.ERROR.REPO), None, exc_info()[2])
# Interface from BaseFolder
- def getcopyinstancelimit(self):
- return 'MSGCOPY_' + self.repository.getname()
+ def getinstancelimitnamespace(self):
+ return MSGCOPY_NAMESPACE + self.repository.getname()
# Interface from BaseFolder
def get_uidvalidity(self):
diff --git a/offlineimap/init.py b/offlineimap/init.py
index 81d0c33..d0a98de 100644
--- a/offlineimap/init.py
+++ b/offlineimap/init.py
@@ -31,6 +31,7 @@ from offlineimap.ui import UI_LIST, setglobalui, getglobalui
from offlineimap.CustomConfig import CustomConfigParser
from offlineimap.utils import stacktrace
from offlineimap.repository import Repository
+from offlineimap.folder.IMAP import MSGCOPY_NAMESPACE
import traceback
import collections
@@ -45,7 +46,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 = ACCOUNT_LIMITED_THREAD_NAME,
+ ACCOUNT_LIMITED_THREAD_NAME,
target = account.syncrunner,
name = "Account sync %s"% accountname
)
@@ -298,8 +299,8 @@ class OfflineImap:
# 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]:
+ for instancename in [accounts.FOLDER_NAMESPACE + reposname,
+ MSGCOPY_NAMESPACE + reposname]:
if options.singlethreading:
threadutil.initInstanceLimit(instancename, 1)
else:
diff --git a/offlineimap/threadutil.py b/offlineimap/threadutil.py
index 1802053..b275b2c 100644
--- a/offlineimap/threadutil.py
+++ b/offlineimap/threadutil.py
@@ -221,37 +221,37 @@ class ExitNotifyThread(Thread):
# Instance-limited threads
######################################################################
-instancelimitedsems = {}
+limitedNamespaces = {}
-def initInstanceLimit(instancename, instancemax):
+def initInstanceLimit(limitNamespace, instancemax):
"""Initialize the instance-limited thread implementation.
- Run up to intancemax threads for the given instancename. This allows
- to honor maxsyncaccounts and maxconnections."""
+ Run up to intancemax threads for the given limitNamespace. This allows to
+ honor maxsyncaccounts and maxconnections."""
- global instancelimitedsems
+ global limitedNamespaces
- if not instancename in instancelimitedsems:
- instancelimitedsems[instancename] = BoundedSemaphore(instancemax)
+ if not limitNamespace in limitedNamespaces:
+ limitedNamespaces[limitNamespace] = BoundedSemaphore(instancemax)
class InstanceLimitedThread(ExitNotifyThread):
- def __init__(self, instancename, *args, **kwargs):
+ def __init__(self, limitNamespace, *args, **kwargs):
# XXX: this is not a instance name, is it?
- self.instancename = instancename
+ self.limitNamespace = limitNamespace
super(InstanceLimitedThread, self).__init__(*args, **kwargs)
def start(self):
- global instancelimitedsems
+ global limitedNamespaces
- instancelimitedsems[self.instancename].acquire()
+ limitedNamespaces[self.limitNamespace].acquire()
ExitNotifyThread.start(self)
def run(self):
- global instancelimitedsems
+ global limitedNamespaces
try:
ExitNotifyThread.run(self)
finally:
- if instancelimitedsems and instancelimitedsems[self.instancename]:
- instancelimitedsems[self.instancename].release()
+ if limitedNamespaces and limitedNamespaces[self.limitNamespace]:
+ limitedNamespaces[self.limitNamespace].release()
--
2.7.4
More information about the OfflineIMAP-project
mailing list