|
@@ -1,4 +1,5 @@
|
|
# -*- coding: utf-8 -*-
|
|
# -*- coding: utf-8 -*-
|
|
|
|
+import os
|
|
import socket
|
|
import socket
|
|
import time
|
|
import time
|
|
|
|
|
|
@@ -29,6 +30,7 @@ class AMQPBackend(BaseDictBackend):
|
|
Producer = Producer
|
|
Producer = Producer
|
|
|
|
|
|
_pool = None
|
|
_pool = None
|
|
|
|
+ _pool_owner_pid = None
|
|
|
|
|
|
def __init__(self, connection=None, exchange=None, exchange_type=None,
|
|
def __init__(self, connection=None, exchange=None, exchange_type=None,
|
|
persistent=None, serializer=None, auto_delete=True,
|
|
persistent=None, serializer=None, auto_delete=True,
|
|
@@ -253,6 +255,19 @@ class AMQPBackend(BaseDictBackend):
|
|
raise NotImplementedError(
|
|
raise NotImplementedError(
|
|
"restore_taskset is not supported by this backend.")
|
|
"restore_taskset is not supported by this backend.")
|
|
|
|
|
|
- @cached_property
|
|
|
|
|
|
+ def _set_pool(self):
|
|
|
|
+ self._pool = self.app.broker_connection().Pool(self.connection_max)
|
|
|
|
+ self._pool_owner_pid = os.getpid()
|
|
|
|
+
|
|
|
|
+ def _reset_after_fork(self):
|
|
|
|
+ self._pool.force_close_all()
|
|
|
|
+
|
|
|
|
+ @property
|
|
def pool(self):
|
|
def pool(self):
|
|
- return self.app.broker_connection().Pool(self.connection_max)
|
|
|
|
|
|
+ if self._pool is None:
|
|
|
|
+ self._set_pool()
|
|
|
|
+ elif os.getpid() != self._pool_owner_pid:
|
|
|
|
+ print("--- RESET POOL AFTER FORK --- ")
|
|
|
|
+ self._reset_after_fork()
|
|
|
|
+ self._set_pool()
|
|
|
|
+ return self._pool
|