multiwin.py: Fatal IO error 0 (Success) on X server :0.0. python: ../../src/xcb_io.c:249: process_responses: Assertion `(((long) (dpy->last_request_read) - (long) (dpy->request)) <= 0)' failed.

Sometimes I get:

multiwin.py: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.0.

위 2개의 에러가 뜬다면, 그것은 multiprocessing 모듈을 썻기 때문일 것이다.


즉 동시에 X server랑 통신하려고하면 에러가 난다.


즉, UI는 무조건 main process에서 변경할 수 있다. fork 시킨 자식 프로세스가 변경하기위해서 X server와 커넥션을 하려고하면 무조건 에러가 난다.


이부분 때문에.. 고생좀 했다. 


아래 사이트 참초:

http://stackoverflow.com/questions/9989475/python-multiprocessing-with-2-gtk-windows



▣ 질문: 멀티 프로세싱을 처리할때 어떻게 해야 신뢰성 있게 자식 프로세스의 stdout 결과를 redirect 할 수 있는가?


답변

이것에 대한 해결방법중 하나는 다음과 같다.

먼저 당신의 프로세스들을 메뉴얼하게 생성 해야 된다. 이러한 것들은 명시적으로 stdout/stderr file 핸들을 접근하게 될 것이다. 그리고 나서 당신은 socket을 이용해서 sub process와 커뮤니케이트를 하게 되고 multiprocessing.connection을 socket 위에서 하게 된다. 즉, multiprocessing.Pipe와 같은 것이다.

이러한 작업은 당신에게 IPC와 같은 기능을 제공해 줄 것이다.


아래에 2개의 에제를 참고하도록 하시오.


master.py

import multiprocessing.connection
import subprocess
import socket
import sys, os

## Listen for connection from remote process (and find free port number)
port = 10000
while True:
    try:
        l = multiprocessing.connection.Listener(('localhost', int(port)), authkey="secret")
        break
    except socket.error as ex:
        if ex.errno != 98:
            raise
        port += 1  ## if errno==98, then port is not available.

proc = subprocess.Popen((sys.executable, "subproc.py", str(port)), stdout=subprocess.PIPE, stderr=subprocess.PIPE)

## open connection for remote process
conn = l.accept()
conn.send([1, "asd", None])
print(proc.stdout.readline())


subproc.py
import multiprocessing.connection
import subprocess
import sys, os, time

port = int(sys.argv[1])
conn = multiprocessing.connection.Client(('localhost', port), authkey="secret")

while True:
    try:
        obj = conn.recv()
        print("received: %s\n" % str(obj))
        sys.stdout.flush()
    except EOFError:  ## connection closed
        break


'Computer Science > Python' 카테고리의 다른 글

PIL 라이브러리: Image.open AttributeError  (0) 2013.11.26
subprocess  (0) 2013.07.26
mutlprocessing의 오류  (0) 2013.07.19
GUI 프로그래밍  (0) 2013.06.23
ImageMagick for Python  (0) 2013.05.07
7장 클래스와 객체지향 프로그래밍  (0) 2012.07.03

+ Recent posts