do not bind to a specific event loop at import time (#53)
parent
7af816adb1
commit
3e6a654a75
|
@ -41,8 +41,6 @@ try:
|
|||
except ImportError:
|
||||
import trollius as asyncio
|
||||
|
||||
loop = asyncio.get_event_loop()
|
||||
|
||||
|
||||
class DgramAsyncioProtocol(asyncio.DatagramProtocol, AbstractAsyncioTransport):
|
||||
"""Base Asyncio datagram Transport, to be used with AsyncioDispatcher"""
|
||||
|
@ -50,15 +48,18 @@ class DgramAsyncioProtocol(asyncio.DatagramProtocol, AbstractAsyncioTransport):
|
|||
addressType = lambda x: x
|
||||
transport = None
|
||||
|
||||
def __init__(self, sock=None, sockMap=None):
|
||||
def __init__(self, sock=None, sockMap=None, loop=None):
|
||||
self._writeQ = []
|
||||
self._lport = None
|
||||
if loop is None:
|
||||
loop = asyncio.get_event_loop()
|
||||
self.loop = loop
|
||||
|
||||
def datagram_received(self, datagram, transportAddress):
|
||||
if self._cbFun is None:
|
||||
raise error.CarrierError('Unable to call cbFun')
|
||||
else:
|
||||
loop.call_soon(self._cbFun, self, transportAddress, datagram)
|
||||
self.loop.call_soon(self._cbFun, self, transportAddress, datagram)
|
||||
|
||||
def connection_made(self, transport):
|
||||
self.transport = transport
|
||||
|
@ -79,7 +80,7 @@ class DgramAsyncioProtocol(asyncio.DatagramProtocol, AbstractAsyncioTransport):
|
|||
|
||||
def openClientMode(self, iface=None):
|
||||
try:
|
||||
c = loop.create_datagram_endpoint(
|
||||
c = self.loop.create_datagram_endpoint(
|
||||
lambda: self, local_addr=iface, family=self.sockFamily
|
||||
)
|
||||
self._lport = asyncio.async(c)
|
||||
|
@ -89,7 +90,7 @@ class DgramAsyncioProtocol(asyncio.DatagramProtocol, AbstractAsyncioTransport):
|
|||
|
||||
def openServerMode(self, iface):
|
||||
try:
|
||||
c = loop.create_datagram_endpoint(
|
||||
c = self.loop.create_datagram_endpoint(
|
||||
lambda: self, local_addr=iface, family=self.sockFamily
|
||||
)
|
||||
self._lport = asyncio.async(c)
|
||||
|
|
|
@ -34,13 +34,6 @@ import socket
|
|||
from pysnmp.carrier.base import AbstractTransportAddress
|
||||
from pysnmp.carrier.asyncio.dgram.base import DgramAsyncioProtocol
|
||||
|
||||
try:
|
||||
import asyncio
|
||||
except ImportError:
|
||||
import trollius as asyncio
|
||||
|
||||
loop = asyncio.get_event_loop()
|
||||
|
||||
domainName = snmpUDPDomain = (1, 3, 6, 1, 6, 1, 1)
|
||||
|
||||
|
||||
|
|
|
@ -8,12 +8,6 @@ import socket
|
|||
from pysnmp.carrier.base import AbstractTransportAddress
|
||||
from pysnmp.carrier.asyncio.dgram.base import DgramAsyncioProtocol
|
||||
|
||||
try:
|
||||
import asyncio
|
||||
except ImportError:
|
||||
import trollius as asyncio
|
||||
|
||||
loop = asyncio.get_event_loop()
|
||||
|
||||
domainName = snmpUDP6Domain = (1, 3, 6, 1, 2, 1, 100, 1, 2)
|
||||
|
||||
|
|
|
@ -40,8 +40,6 @@ try:
|
|||
except ImportError:
|
||||
import trollius as asyncio
|
||||
|
||||
loop = asyncio.get_event_loop()
|
||||
|
||||
|
||||
class AsyncioDispatcher(AbstractTransportDispatcher):
|
||||
"""AsyncioDispatcher based on asyncio event loop"""
|
||||
|
@ -52,17 +50,18 @@ class AsyncioDispatcher(AbstractTransportDispatcher):
|
|||
if 'timeout' in kwargs:
|
||||
self.setTimerResolution(kwargs['timeout'])
|
||||
self.loopingcall = None
|
||||
self.loop = kwargs.pop('loop', asyncio.get_event_loop())
|
||||
|
||||
@asyncio.coroutine
|
||||
def handle_timeout(self):
|
||||
while True:
|
||||
yield asyncio.From(asyncio.sleep(self.getTimerResolution()))
|
||||
self.handleTimerTick(loop.time())
|
||||
self.handleTimerTick(self.loop.time())
|
||||
|
||||
def runDispatcher(self, timeout=0.0):
|
||||
if not loop.is_running():
|
||||
if not self.loop.is_running():
|
||||
try:
|
||||
loop.run_forever()
|
||||
self.loop.run_forever()
|
||||
except KeyboardInterrupt:
|
||||
raise
|
||||
except Exception:
|
||||
|
@ -95,6 +94,6 @@ if not hasattr(asyncio, "From"):
|
|||
def handle_timeout(self):
|
||||
while True:
|
||||
yield from asyncio.sleep(self.getTimerResolution())
|
||||
self.handleTimerTick(loop.time())
|
||||
self.handleTimerTick(self.loop.time())
|
||||
AsyncioDispatcher.handle_timeout = handle_timeout\
|
||||
""")
|
||||
|
|
Loading…
Reference in New Issue