Merge "Workaround for TypeError in zerorpc Events.__del__"
This commit is contained in:
commit
086a3e28c3
@ -12,9 +12,10 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
import gevent
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
import gevent
|
from functools import update_wrapper
|
||||||
|
|
||||||
# NOTE(jnowak): this is a workaround for bug in zerorpc.gevent_zmq
|
# NOTE(jnowak): this is a workaround for bug in zerorpc.gevent_zmq
|
||||||
# it's broken on gevent patched environments and when
|
# it's broken on gevent patched environments and when
|
||||||
@ -23,6 +24,7 @@ import zmq.green as zmq
|
|||||||
if tuple(map(int, zmq.__version__.split('.'))) > (13, 0, 2):
|
if tuple(map(int, zmq.__version__.split('.'))) > (13, 0, 2):
|
||||||
sys.modules['zmq'] = zmq
|
sys.modules['zmq'] = zmq
|
||||||
else:
|
else:
|
||||||
|
del sys.modules['zmq']
|
||||||
del zmq
|
del zmq
|
||||||
|
|
||||||
# NOTE(jnowak): NOQA because of workaround above (E402)
|
# NOTE(jnowak): NOQA because of workaround above (E402)
|
||||||
@ -32,6 +34,24 @@ from solar.core.log import log # NOQA
|
|||||||
from solar.orchestration.executors import base # NOQA
|
from solar.orchestration.executors import base # NOQA
|
||||||
|
|
||||||
|
|
||||||
|
# NOTE(jnowak): this is there because of __del__ in zerorpc Events
|
||||||
|
# without that patch you may have:
|
||||||
|
# TypeError("'NoneType' object is not callable",)
|
||||||
|
# during interpreter shutdown
|
||||||
|
# see #1549384 bug for more info
|
||||||
|
def patch_events():
|
||||||
|
def fixed_del(obj):
|
||||||
|
try:
|
||||||
|
obj.__orig_del__()
|
||||||
|
except TypeError:
|
||||||
|
pass
|
||||||
|
update_wrapper(fixed_del, zerorpc.events.Events.__del__)
|
||||||
|
zerorpc.events.Events.__orig_del__ = zerorpc.events.Events.__del__
|
||||||
|
zerorpc.events.Events.__del__ = fixed_del
|
||||||
|
|
||||||
|
patch_events()
|
||||||
|
|
||||||
|
|
||||||
class PoolBasedPuller(zerorpc.Puller):
|
class PoolBasedPuller(zerorpc.Puller):
|
||||||
"""ImprovedPuller allows to control pool of gevent threads and
|
"""ImprovedPuller allows to control pool of gevent threads and
|
||||||
track assignments of gevent threads
|
track assignments of gevent threads
|
||||||
|
Loading…
x
Reference in New Issue
Block a user