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
threading und raw_input()
- mkesper
- User
- Beiträge: 919
- Registriert: Montag 20. November 2006, 15:48
- Wohnort: formerly known as mkallas
- Kontaktdaten:
Ich vermute, dass hier der GIL zuschlägt. Du müsstest dann separate Prozesse verwenden statt Threads.
-
- User
- Beiträge: 110
- Registriert: Freitag 25. Dezember 2009, 03:42
Hi,
OK, Danke.
Was mich nur wundert - ich habe ein einfaches Beispiel zusammen geschrieben, was im Grunde das gleiche macht, nur es funktioniert.
Viele Grüße
Maxi
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()
Maxi
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
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.
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.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
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.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
-
- User
- Beiträge: 110
- Registriert: Freitag 25. Dezember 2009, 03:42
Hi,
Zeile 17: raw_input()
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:
Viele Grüße
Maxi
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)Vorab: Deine commit-Messages sind nicht zu gebrauchen, da die Versionskontrolle das sowieso macht, was du schreibst.
Stimmt nicht...IMHO ist das nicht das gleiche, da `raw_input` blockt, `print` nicht.
Zeile 17: raw_input()
Habe alles was damit zutun hatte auskommentiert.Das Problem dürfte eher die Kombination Threads und pynotify sein
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:
Maxi