/usr/share/pyshared/kombu/syn.py is in python-kombu 1.4.3-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | """
kombu.syn
=========
Thread synchronization.
:copyright: (c) 2009 - 2011 by Ask Solem.
:license: BSD, see LICENSE for more details.
"""
import sys
#: current blocking method
__sync_current = None
def blocking(fun, *args, **kwargs):
"""Make sure function is called by blocking and waiting for the result,
even if we're currently in a monkey patched eventlet/gevent
environment."""
if __sync_current is None:
select_blocking_method(detect_environment())
return __sync_current(fun, *args, **kwargs)
def select_blocking_method(type):
"""Select blocking method, where `type` is one of default
gevent or eventlet."""
global __sync_current
__sync_current = {"eventlet": _sync_eventlet,
"gevent": _sync_gevent,
"default": _sync_default}[type]()
def _sync_default():
"""Create blocking primitive."""
def __blocking__(fun, *args, **kwargs):
return fun(*args, **kwargs)
return __blocking__
def _sync_eventlet():
"""Create Eventlet blocking primitive."""
from eventlet import spawn
def __eblocking__(fun, *args, **kwargs):
return spawn(fun, *args, **kwargs).wait()
return __eblocking__
def _sync_gevent():
"""Create gevent blocking primitive."""
from gevent import Greenlet
def __gblocking__(fun, *args, **kwargs):
return Greenlet.spawn(fun, *args, **kwargs).get()
return __gblocking__
def detect_environment():
## -eventlet-
if "eventlet" in sys.modules:
try:
from eventlet.patcher import is_monkey_patched as is_eventlet
import socket
if is_eventlet(socket):
return "eventlet"
except ImportError:
pass
# -gevent-
if "gevent" in sys.modules:
try:
from gevent import socket as _gsocket
import socket
if socket.socket is _gsocket.socket:
return "gevent"
except ImportError:
pass
return "default"
|