Ich versuche, mehrere Funktionen nacheinander auszuführen, aber mein Code bleibt in einer Schleife stecken. Ich habe versucht, multiprocessing
zu implementieren, als jemand in this thread empfohlen, aber das hat nicht geholfen.Ausführen von Funktionen in Python nacheinander
Meine Funktion sendet ein Foto an Clarifai, um eine Liste der mit diesem Foto verknüpften Schlüsselwörter zu erhalten. Danach sage ich PyAutoGUI, irgendwo auf dem Bildschirm zu klicken, wenn die Liste ein Wort enthält, das mit einer lokalen Variablen übereinstimmt. Hier ist, was eine Funktion wie folgt aussieht:
def p1_click(keyword, p1, app, model):
p1_response = model.predict_by_filename(filename='/Users/raulrodriguez/CODE6_OS/scripts/captcha/saucissons/p1.png')
p1_concepts = p1_response['outputs'][0]['data']['concepts']
for concept in p1_concepts:
clean_list = list(map(lambda s: s.strip(), concept['name']))
while any(word == inflection.singularize(keyword) for word in concept['name'].split()) == True:
pyautogui.click(x=490, y=385)
break
if __name__=='__main__':
p1 = Process(target=p1_click(keyword, p1, app, model))
p1.start()
Offensichtlich, ich versuche dies für mehrere Fotos zu tun - 10 um genau zu sein - von dem vorherigen Code zu replizieren und p1
für die Nummer des Fotos zu ersetzen (dh p2_click
. .. p2.start()
für ein Foto mit dem Namen p2
) und Ändern der Koordinatenwerte des Operators pyautogui.click
. Das Problem ist jedoch, dass, wenn ich alles zusammenstelle, mein Cursor auf die Koordinaten des Fotos, für das es eine Übereinstimmung gibt, klickt und unaufhörlich klickt. Ich wollte eine Kettenreaktion haben, bei der das Programm einmal auf ein Matchfoto klickt und dann zum nächsten übergeht. Wenn jemand freundlich genug wäre, um mitzuhelfen, würde ich die Hilfe wirklich schätzen.
Vielen Dank für Ihre Antwort! Ich habe den für die anderen Fotos vorgeschlagenen Code geändert und folgende Fehlermeldung erhalten: 'objc [3396]: + [NSEvent initialize] wurde möglicherweise in einem anderen Thread ausgeführt, als fork() aufgerufen wurde. Wir können es nicht sicher aufrufen oder im fork() child-Prozess ignorieren. Absturz stattdessen. Setzen Sie einen Breakpoint auf objc_initializeAfterForkError auf debug. "Muss ich' p1.start() '' entfernen? – solo
@rrod Dies scheint wie ein Plattformproblem oder etwas ähnliches zu sein. Es ist nicht mit Python verwandt. Eine schnelle [Google-Suche] (https://www.google.co.in/search?q=objc%5B3396%5D%3A+%2B%5BNSEvent+initialisieren%5D+könnte+haben+in+progress+in + ein anderes + thread + wenn + fork() + wurde + aufgerufen & oq = objc% 5B3396% 5D% 3A +% 2B% 5BNSEvent + initialisieren% 5D + kann + haben + war + + Fortschritt + + ein + Thread + wenn + fork() + wurde + genannt & aqs = chrome..69i57.391j0j7 & sourceid = chrome & ie = UTF-8) könnte hilfreich sein. Wenn dies nicht hilft, können Sie eine andere Frage stellen. Diese Antwort löst Ihr ursprüngliches Problem, Funktionen parallel aufzurufen. –