Seite 1 von 1
threading und raw_input()
Verfasst: Montag 4. Januar 2010, 00:49
von maxi_king_333
Hi,
ich habe mehrere Threads am laufen und sobald ich in einem Modul, das nicht als Thread läuft und vom Hauptprogramm gestartet wird, ein raw_input() mache stoppen alle.
Ich weiß nicht warum - bei einem vereinfachtem Programm geht es.
Der Code ist Teil meines Projekts - FBCallNotify:
https://developer.berlios.de/projects/fbcallnotify/
Hauptprogramm: fbcallnotify.py
Threads: Klassen: Parse, Callmonitor Module: notifyer
Modul: interface Funktion: start()
Ist die Stelle mit raw_input()
Vielen Dank schonmal fürs Lesen und Viele Grüße
Maxi
Verfasst: Montag 4. Januar 2010, 13:43
von mkesper
Ich vermute, dass hier der
GIL zuschlägt. Du müsstest dann
separate Prozesse verwenden statt Threads.
Verfasst: Montag 4. Januar 2010, 14:00
von maxi_king_333
Hi,
OK, Danke.
Was mich nur wundert - ich habe ein einfaches Beispiel zusammen geschrieben, was im Grunde das gleiche macht, nur es funktioniert.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import threading
class test(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
while True:
print "Test"
test = test()
test.start()
raw_input()
Viele Grüße
Maxi
Verfasst: Montag 4. Januar 2010, 14:23
von cofi
Vorab: Deine commit-Messages sind nicht zu gebrauchen, da die Versionskontrolle das sowieso macht, was du schreibst.
Das hier solltest du vielleicht lesen:
http://who-t.blogspot.com/2009/12/on-co ... sages.html
IMHO ist das nicht das gleiche, da `raw_input` blockt, `print` nicht.
Verfasst: Montag 4. Januar 2010, 14:35
von Trundle
Das Problem dürfte eher die Kombination Threads und pynotify sein, `raw_input()` gibt den GIL schon frei und mit gobject alleine
funktioniert das auch.
Verfasst: Montag 4. Januar 2010, 14:56
von maxi_king_333
Hi,
Vorab: Deine commit-Messages sind nicht zu gebrauchen, da die Versionskontrolle das sowieso macht, was du schreibst.
Ich weiß, wenn da gravierende Änderungen wären würde ich andere schreiben, aber ich habe da hauptsächlich den Code hochgeladen um ihn hier zu zeigen und nicht immer auf Pastebin oder sonstwo hingehen zu müssen und haufenweise Texte einzufügen zu müssen. (Also das wird schon ein Projekt - mit richtigen commit-Messages)
IMHO ist das nicht das gleiche, da `raw_input` blockt, `print` nicht.
Stimmt nicht...
Zeile 17: raw_input()
Das Problem dürfte eher die Kombination Threads und pynotify sein
Habe alles was damit zutun hatte auskommentiert.
Jetzt geht es aber so wirklich die Lösung ist es nicht - ich brauche pynotify ja.
Mit multiprocessing habe ich mich mal auseinander gesetzt und dabei folgenden Fehler erhalten:
Code: Alles auswählen
Connected to 127.0.0.1:1030
FBCallNotify - Command Promt
Process Process-3:
Traceback (most recent call last):
File "/usr/lib/python2.6/multiprocessing/process.py", line 232, in _bootstrap
self.run()
File "/usr/lib/python2.6/multiprocessing/process.py", line 88, in run
self._target(*self._args, **self._kwargs)
File "./fbcallnotify.py", line 38, in start
action = raw_input("Type \"help\" for help: ")
EOFError: EOF when reading a line
Type "help" for help:
Viele Grüße
Maxi