Fix compatibility with Python 3.3.1.

This commit is contained in:
Valentin Lorentz 2013-05-14 19:59:19 +02:00
parent 6ffcf122a7
commit 04b7d9eeda
2 changed files with 25 additions and 3 deletions

View File

@ -6,8 +6,7 @@ Master branch: [![Build Status (master branch)](https://travis-ci.org/ProgVal/Li
Testing branch: [![Build Status (testing branch)](https://travis-ci.org/ProgVal/Limnoria.png?branch=testing)](https://travis-ci.org/ProgVal/Limnoria) Testing branch: [![Build Status (testing branch)](https://travis-ci.org/ProgVal/Limnoria.png?branch=testing)](https://travis-ci.org/ProgVal/Limnoria)
Limnoria is tested with Python 2.6, 2.7, 3.2, and Pypy. Python 2.5 is not supported. Limnoria is tested with Python 2.6, 2.7, 3.2, 3.3, and Pypy. Python 2.5 and older versions are not supported.
Python 3.3 is not fully supported because of a [bug in Python](http://bugs.python.org/issue17856)
# EVERYONE: # EVERYONE:

View File

@ -36,8 +36,9 @@ import os
import sys import sys
import time import time
import atexit import atexit
import select
import threading import threading
import multiprocessing # python 2.6 and later! import multiprocessing
import re import re
@ -73,6 +74,28 @@ class SupyProcess(multiprocessing.Process):
super(SupyProcess, self).__init__(*args, **kwargs) super(SupyProcess, self).__init__(*args, **kwargs)
log.debug('Spawning process %q.', self.name) log.debug('Spawning process %q.', self.name)
if sys.version_info[0:3] == (3, 3, 1) and hasattr(select, 'poll'):
# http://bugs.python.org/issue17707
import multiprocessing.connection
def _poll(fds, timeout):
if timeout is not None:
timeout = int(timeout * 1000) # timeout is in milliseconds
fd_map = {}
pollster = select.poll()
for fd in fds:
pollster.register(fd, select.POLLIN)
if hasattr(fd, 'fileno'):
fd_map[fd.fileno()] = fd
else:
fd_map[fd] = fd
ls = []
for fd, event in pollster.poll(timeout):
if event & select.POLLNVAL:
raise ValueError('invalid file descriptor %i' % fd)
ls.append(fd_map[fd])
return ls
multiprocessing.connection._poll = _poll
commandsProcessed = 0 commandsProcessed = 0