2009-02-25 6 views
3

J'ai une application en Python 2.5 qui écoute une file d'attente de beanstalk. Cela fonctionne bien sur toutes les machines que j'ai testées jusqu'ici, excepté de mon MacBook Pro nouvellement acquis.Problèmes sur un module de sélection sur Python 2.5

Sur cet ordinateur, lorsque je tente de l'exécuter je reçois cette erreur:

Traceback (most recent call last): 
    File "jobs.py", line 181, in <module> 
    Jobs().start() 
    File "jobs.py", line 154, in start 
    self.jobQueue = Queue() 
    File "src/utils/queue.py", line 16, in __init__ 
    self.connection = serverconn.ServerConn(self.server, self.port) 
    File "src/beanstalk/serverconn.py", line 25, in __init__ 
    self.poller = select.poll() 
AttributeError: 'module' object has no attribute 'poll' 

Le serverconn.py a les importations suivantes:

import socket, select 

Et quand je tente de l'exécuter à partir ligne de commande, il échoue aussi:

Python 2.5.1 (r251:54863, Jul 23 2008, 11:00:16) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import select 
>>> select.poll() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'module' object has no attribute 'poll' 

Avez-vous une idée de ce qui peut se passer? PS: Même si je suis assez confiant que ce n'est pas un problème de source, si vous avez besoin de quelques informations sur la source qui ne fonctionne pas, c'est disponible sur [http://pastie.org/399342](this pastie].

Mise à jour: depuis la première réponse que je suis spécule si select.poll() est ou non pris en charge sur Mac OS, mais j'ai un iMac trop et avec la même version exacte du système d'exploitation et il fonctionne très bien:

2009-02-25 00:27:10,067 - Queue - DEBUG - Connecting to BeansTalk daemon @ localhost:11300 
+0

pourriez-vous ajouter le tag 'osx'? Je n'ai pas de représentant à faire moi-même – popcnt

Répondre

0

utiliser la version MacPorts de python sur votre MBP.

Mac OS X prend en charge cette fonction. Apple stock Leopard python 2.5.1 n'a pas.

vous voulez télécharger et installer MacPorts si vous ne l'avez pas déjà fait. Pour info, je trouve Porticus être une excellente interface graphique autour de MacPorts.

Voici une comparaison de python Leopard stock contre le dernier MacPorts python2.5 ...


python Leopard d'Apple (python 2.5.1) - select.poll() cassé

$ /usr/bin/python 
Python 2.5.1 (r251:54863, Jan 13 2009, 10:26:13) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import socket, select 
>>> select.poll() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'module' object has no attribute 'poll' 
>>> 

Macports (python 2.5.4) - select.poll() fonctionne!

$ /opt/local/bin/python2.5 
Python 2.5.4 (r254:67916, Feb 3 2009, 21:40:31) 
[GCC 4.0.1 (Apple Inc. build 5488)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import socket, select 
>>> select.poll() 
<select.poll object at 0x11128> 
>>> 
+0

Je ne suis pas sûr de savoir comment cela fonctionne. disponible en mac? – rampr

0

select.poll()

(Non pris en charge par tous les systèmes d'exploitation.) Renvoie un objet d'interrogation, qui prend en charge l'enregistrement et des descripteurs de fichiers annulation de l'enregistrement, puis les sondages pour les événements d'E/S; voir la section Objets d'interrogation ci-dessous pour les méthodes prises en charge par les objets d'interrogation.

Je suppose que ce n'est pas pris en charge sur les macOS.

+0

monkut, merci pour votre réponse, mais pas le cas - j'ai un iMac où il fonctionne très bien ... :(Cela me rend plus intrigué – kolrie

+0

Ok, on dirait que JMP est pointint vous dans la bonne direction Bonne chance à résoudre votre problème! – monkut

+0

Merci monkut, je pense que j'ai installé 2.5 sur mon autre mac en utilisant MacPorts ... Go figure ... – kolrie

6

Selon this macports ticket mise en œuvre d'Apple de poll() est tout droit cassé.Apple a contourner ce problème en désactivant poll() dans Python et macports désactive désormais le sondage dans leurs Pythons. Je pense que cela signifie que vous devez regarder dans select.kevent() de Python au lieu de poll sur mac.

Questions connexes