Seite 1 von 1

Problem mit multiprocessing und Args

Verfasst: Montag 24. Juli 2017, 17:39
von Acer
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

Re: Problem mit multiprocessing und Args

Verfasst: Montag 24. Juli 2017, 19:07
von noisefloor
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

Re: Problem mit multiprocessing und Args

Verfasst: Montag 24. Juli 2017, 19:11
von 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.

Re: Problem mit multiprocessing und Args

Verfasst: Montag 24. Juli 2017, 19:18
von noisefloor
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

Re: Problem mit multiprocessing und Args

Verfasst: Montag 24. Juli 2017, 19:43
von Acer
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

Re: Problem mit multiprocessing und Args

Verfasst: Montag 24. Juli 2017, 20:20
von 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.