diff --git a/erp5/util/taskdistribution/__init__.py b/erp5/util/taskdistribution/__init__.py
index baa60353a541cfe7052a16841484e2acf80572eb..2891dcd8ab5a1d385c4e9764c79990dade235eef 100644
--- a/erp5/util/taskdistribution/__init__.py
+++ b/erp5/util/taskdistribution/__init__.py
@@ -95,16 +95,21 @@ def patchRPCParser(error_handler):
     parser_klass.feed = verbose_feed
 
 class RPCRetry(object):
-    def __init__(self, proxy, retry_time, logger):
+    def __init__(self, proxy, retry_time, logger, timeout=120):
         super(RPCRetry, self).__init__()
         self._proxy = proxy
         self._retry_time = retry_time
         self._logger = logger
         self.__rpc_lock = threading.Lock()
+        self.timeout = timeout
 
     def _RPC(self, func_id, args=()):
-        with self.__rpc_lock:
-            return getattr(self._proxy, func_id)(*args)
+            default_timeout = socket.getdefaulttimeout()
+            socket.setdefaulttimeout(self.timeout)
+            try:
+                return getattr(self._proxy, func_id)(*args)
+            finally:
+                socket.setdefaulttimeout(default_timeout)
 
     def _retryRPC(self, func_id, args=()):
         retry_time = self._retry_time