0
asyncio
을 사용하여 pyzmq
의 ZeroMQ 서버를 만들고 있습니다. 나는 정상적으로 서버를 멈추는 것을 처리하려고 노력하고있다. 그러나 비동기 모듈에 대한 문서는 거의 없으며 현재 폴링/대기를 중지하는 간단한 방법이 아닌 것 같다. .stop
메서드에서 루프를 중지하면 많은 작업이 수행되지 않고 실제로 종료되지 않습니다. 이 실행중인 경우비동기 zmq에서 키보드 인터럽트 처리
daemon = ZMQHandler()
def signal_handler(num, frame):
daemon.stop()
signal.signal(signal.SIGTERM, signal_handler)
signal.signal(signal.SIGINT, signal_handler)
daemon.start()
이 어떻게 정상적으로이 중지합니까 :
import zmq
import zmq.asyncio
import asyncio
class ZMQHandler():
def __init__(self):
self.loop = zmq.asyncio.ZMQEventLoop()
asyncio.set_event_loop(self.loop)
self.context = zmq.asyncio.Context()
self.socket = self.context.socket(zmq.DEALER)
self.socket.bind('tcp://127.0.0.1:5000')
self.socket.linger = -1
def start(self):
asyncio.ensure_future(self.listen())
self.loop.run_forever()
def stop(self):
print('Stopping')
self.loop.stop()
async def listen(self):
self.raw = await self.socket.recv()
asyncio.ensure_future(self.listen())
다음은이를 시작할 것 몇 가지 예제 코드는? self.socket.close()
을 호출하면 zmq.error.ZMQError: Socket operation on non-socket
오류가 발생하고 self.context.destroy()
을 호출하면 기본적으로 소켓이 ETERM
으로 완전히 종료되지 않는다는 불만이 제기됩니다.