IPC 용 ZeroMQ를 사용합니다. 한 프로세스가 소켓 (파이프 또는 유닉스 소켓?)을 청취하고 다른 프로세스가 기록 할 때 완벽하게 작동합니다. 수신프로세서 간 통신, 하나의 프로세서 쓰기, 다른 읽기
응용 :
context = zmq.Context.instance()
sock = context.socket(zmq.REQ)
sock.bind('ipc:///tmp/myapp')
sock.send('foo')
response = sock.recv()
print response
것은 내가 내 응용 프로그램의 여러 노동자 (프로세스)를 실행할 필요가 있습니다 :
...
listener = IPCListener()
listener.startup_thread = Thread(target=listener.serve)
listener.startup_thread.daemon = True
listener.startup_thread.start()
class IPCListener()
def __init__(self)
self.context = zmq.Context.instance()
self.sock = self.context.socket(znq.REP)
self.sock.connection('ipc:///tmp/myapp')
def serve(self):
while True:
message = self.sock.recv()
response = self.handle_message(message)
self.sock.send(response)
def handle_message(self, message):
if message == 'foo':
do_something_useful()
여기에는 관리자입니다. 내가 'sock.error: [Error 98] Already in use'
내가 여러 프로세스를 만들 수있는 방법은 하나 개의 공통 소켓을 읽을이 있는지 모르겠어요를 얻을 말할 필요도 없죠? zmq로는 불가능할 수도 있지만, 이것을 처리 할 수있는 것은 무엇입니까?
모든 프로세스가 동일한 연결 'ipc : /// tmp/myapp'을 사용합니까? 그게 문제 같아. 이 파일은 실제로 생성/잠금 될 수 있습니다. 'ipc : // tmp/myapp- % d "% os.getpid() 파일이나 프로세스마다 다른 파일을 만들어 동일한 파일을 다시 사용하지 않도록하십시오. – FrobberOfBits
이게 의미가 있지만, , 더 간단한 접근 – KennyPowers