diff --git a/oslo_messaging/_drivers/zmq_driver/poller/green_poller.py b/oslo_messaging/_drivers/zmq_driver/poller/green_poller.py
index 056d2665e..fdf9b442d 100644
--- a/oslo_messaging/_drivers/zmq_driver/poller/green_poller.py
+++ b/oslo_messaging/_drivers/zmq_driver/poller/green_poller.py
@@ -13,7 +13,6 @@
 #    under the License.
 
 import logging
-import threading
 
 import eventlet
 
@@ -67,23 +66,17 @@ class GreenExecutor(zmq_poller.Executor):
     def __init__(self, method):
         self._method = method
         super(GreenExecutor, self).__init__(None)
-        self._done = threading.Event()
 
     def _loop(self):
-        while not self._done.is_set():
+        while True:
             self._method()
             eventlet.sleep()
 
     def execute(self):
-        self.thread = eventlet.spawn(self._loop)
-
-    def wait(self):
-        if self.thread is not None:
-            self.thread.wait()
+        if self.thread is None:
+            self.thread = eventlet.spawn(self._loop)
 
     def stop(self):
         if self.thread is not None:
             self.thread.kill()
-
-    def done(self):
-        self._done.set()
+            self.thread = None
diff --git a/oslo_messaging/_drivers/zmq_driver/poller/threading_poller.py b/oslo_messaging/_drivers/zmq_driver/poller/threading_poller.py
index 0b9b3320c..b150a0613 100644
--- a/oslo_messaging/_drivers/zmq_driver/poller/threading_poller.py
+++ b/oslo_messaging/_drivers/zmq_driver/poller/threading_poller.py
@@ -72,8 +72,9 @@ class ThreadingExecutor(zmq_poller.Executor):
 
     def __init__(self, method):
         self._method = method
-        super(ThreadingExecutor, self).__init__(
-            threading.Thread(target=self._loop))
+        thread = threading.Thread(target=self._loop)
+        thread.daemon = True
+        super(ThreadingExecutor, self).__init__(thread)
         self._stop = threading.Event()
 
     def _loop(self):
@@ -81,14 +82,7 @@ class ThreadingExecutor(zmq_poller.Executor):
             self._method()
 
     def execute(self):
-        self.thread.daemon = True
         self.thread.start()
 
     def stop(self):
         self._stop.set()
-
-    def wait(self):
-        pass
-
-    def done(self):
-        self._stop.set()
diff --git a/oslo_messaging/_drivers/zmq_driver/zmq_poller.py b/oslo_messaging/_drivers/zmq_driver/zmq_poller.py
index c2abd4af3..124a3a736 100644
--- a/oslo_messaging/_drivers/zmq_driver/zmq_poller.py
+++ b/oslo_messaging/_drivers/zmq_driver/zmq_poller.py
@@ -100,11 +100,3 @@ class Executor(object):
     @abc.abstractmethod
     def stop(self):
         """Stop execution"""
-
-    @abc.abstractmethod
-    def wait(self):
-        """Wait until pass"""
-
-    @abc.abstractmethod
-    def done(self):
-        """More soft way to stop rather than killing thread"""