/
__init__.py
94 lines (81 loc) · 2.32 KB
/
__init__.py
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
88
89
90
91
92
93
94
"""
Network code.
"""
def has_select():
try:
import select
import select_impl
return select_impl.SelectProactor
except ImportError:
pass
def has_poll():
try:
import select
if select and hasattr(select, 'poll'):
import poll_impl
return poll_impl.PollProactor
except ImportError:
pass
def has_epoll():
try:
import epoll
import epoll_impl
return epoll_impl.EpollProactor
except ImportError:
pass
def has_stdlib_epoll():
try:
from select import epoll
import stdlib_epoll_impl
return stdlib_epoll_impl.StdlibEpollProactor
except ImportError:
pass
def has_kqueue():
try:
import kqueue
if kqueue.PYKQ_VERSION.split('.')[0] != '2':
raise ImportError("%s too old."%kqueue.PYKQ_VERSION)
import kqueue_impl
return kqueue_impl.KQueueProactor
except ImportError:
pass
def has_stdlib_kqueue():
try:
from select import kqueue
import stdlib_kqueue_impl
return stdlib_kqueue_impl.StdlibKQueueProactor
except ImportError:
pass
def has_iocp():
try:
import win32file
if not hasattr(win32file, 'ConnectEx'):
import warnings
warnings.warn("IOCPProactor implementation requires a newer pywin32 module.")
return
import pywintypes
import socket
import ctypes
import struct
import iocp_impl
return iocp_impl.IOCPProactor
except ImportError:
pass
def has_ctypes_iocp():
try:
import ctypes
import ctypes_iocp_impl
return ctypes_iocp_impl.CTYPES_IOCPProactor
except ImportError:
pass
def get_first(*imps):
"Returns the first result that evaluates to true from a list of callables."
for imp in imps:
proactor = imp()
if proactor:
return proactor
def has_any():
"Returns the best available proactor implementation for the current platform."
return get_first(has_ctypes_iocp, has_iocp, has_stdlib_kqueue, has_kqueue,
has_stdlib_epoll, has_epoll, has_poll, has_select)
DefaultProactor = has_any()