Problem mit multiprocessing und Args

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Acer
User
Beiträge: 4
Registriert: Donnerstag 11. August 2016, 14:47

Hallo liebe Python Gemeinde,

Ich versuche über folgenden Code:

Code: Alles auswählen

proc = Process(target=theaterChaseRainbow, args=(parameters,))
proc.daemon = True
proc.start()
Argumente an folgende Funktion zu übergeben:

Code: Alles auswählen

def theaterChaseRainbow(config):
    if(not Settings.POWER_STRIP and int(Settings.CONFIG.get('Relai', 'GPIO'))> 0):
        GPIO.output(int(Settings.CONFIG.get('Relai', 'GPIO')), GPIO.HIGH) # an 
    Settings.POWER_STRIP = True

    wait_ms=50 
        
    while 1:
        for j in range(256):
            for q in range(3):
                for i in range(0, Settings.STRIP.numPixels(), 3):
                    Settings.STRIP.setPixelColor(i+q, wheel((i+j) % 255))
                Settings.STRIP.show()
                time.sleep(wait_ms/1000.0)
                for i in range(0, Settings.STRIP.numPixels(), 3):
                    Settings.STRIP.setPixelColor(i+q, 0)
Leider bekomme ich immer den folgenden Fehler:

Code: Alles auswählen

('Unexpected error:', <type 'exceptions.TypeError'>, TypeError('theaterChaseRainbow() takes exactly 1 argument (0 given)',))
Bin schon seit 2 Stunden am Googeln leider noch nichts brauchbares gefunden.
Ich verwende die Python Version 2.7.9.

Danke für euere Hilfe.

mfg: Acer
Zuletzt geändert von Anonymous am Montag 24. Juli 2017, 18:55, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

exakt die gleiche Frage vom vermutlich gleichen TE gibt auch im deutschen Raspi-Forum: http://www.forum-raspberrypi.de/Thread- ... g-und-args

Da gibt's auch schon Antworten :-)

Gruß, noisefloor
BlackJack

Das kann nicht sein, denn wenn man das mal auf das nötigste für den Aufruf reduziert, läuft das bei mir problemlos:

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf-8
from __future__ import absolute_import, division, print_function
from multiprocessing import Process
from time import sleep

def theater_chase_rainbow(config):
    while True:
        sleep(0.1)


def main():
    proc = Process(target=theater_chase_rainbow, args=(42,))
    proc.daemon = True
    proc.start()
    sleep(2)


if __name__ == '__main__':
    main()
Und die im Raspi-Forum geäusserte Vermutung es könnte am Wert von `parameters` liegen kann auch nicht sein, denn auch `None` wäre ja *ein* Wert, also das was die Funktion erwartet. Genau wie jeder von `None` verschiedene Wert.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

stimmt - Denkfehler meinerseits. `(None, )` hat einen Wert.... Von daher ist es wohl in der Tat schwierig, die Fehlermeldung mit dem gezeigten Code zu generieren.

Das schöne hier am Python-Forum ist ja, dass man i.d.R. bei Python-Problemen qualitativ bessere Antworten bekommt *schleimspurzieht* :-)

Gruß, noisefloor
Acer
User
Beiträge: 4
Registriert: Donnerstag 11. August 2016, 14:47

Hey danke für eure Antworten, das mit den Pi Forum war ich. :-D
Also wie im Pi Forum beschrieben habe ich unterschwellig durch den umbau von Threading auf multiprocessing den Fehler eingebaut, dass ich die Funktion aufrufe anstatt nur ihren Pfad in eine Variable aufzunehmen.

mfg: Ace
BlackJack

@Acer: Was hier jeder leicht hätte sehen können wenn man den gesamten Traceback gekannt hätte und/oder wenn Du den tatsächlichen Quelltext mit dem Fehler gezeigt hättest.
Antworten