2017-12-16 11 views
0

여러 함수를 하나씩 실행하려고합니다.하지만 코드가 반복적으로 멈추는 경우가 있습니다. multiprocessing을 구현하려고 시도했는데 this thread 사람이 권장했으나 도움이되지 않았습니다.파이썬에서 함수를 연속적으로 실행하기

내 기능은 사진과 관련된 키워드 목록을 가져 오기 위해 Clarifai에 사진을 보내고 그 다음에는 로컬 변수와 일치하는 단어가 목록에있는 경우 화면의 아무 곳이나 클릭하도록 PyAutoGUI에 지시합니다. 다음과 같은 하나 개의 함수 보이는 내용은 다음과 같습니다

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() 

는 분명히, 나는 여러 장의 사진이 작업을 수행하려고 해요 - (10)는 정확하기 위하여 - 즉, (p2_click를 이전 코드를 복제 해 사진의 수를 p1를 대체하여. .. 이라는 사진은 p2.start()), pyautogui.click 연산자의 좌표 값을 변경하십시오. 그러나 문제는 내가 모든 것을 집어 넣을 때 커서는 pyautogui.click 좌표로 이동하여 일치가 있고 끊임없이 클릭한다는 것입니다. 프로그램이 한 번 일치하는 사진을 클릭 한 다음 다음 단계로 이동하는 연쇄 반응을하려는 것입니다. 누군가가 차일을 칠 정도로 친절하면, 나는 진정으로 도움을 주실 것입니다.

답변

1

당신이 직면하고있는 문제는이 코드에 있습니다

if __name__=='__main__': 
    p1 = Process(target=p1_click(keyword, p1, app, model)) 
    p1.start() 

특히이 라인 p1 = Process(target=p1_click(keyword, p1, app, model)). 보다 구체적으로는 target=p1_click(keyword, p1, app, model)입니다. 이 작업을 수행 할 때 p1_click 함수를 호출하면 target에 할당되는 즉시 호출됩니다.

이것은 multiprocessing 모듈을 통해 메소드를 호출하고 인수를 전달하는 방법이 아닙니다. 멀티 모듈에 매개 변수를 전달하려면 다음을 수행

p1 = Process(target=p1_click, args=(keyword, p1, app, model)) 

당신은 멀티 방법과 응답을 this SO answer

+0

감사에서 사용하는 방법에 대한 자세한 정보를 얻을 수 있습니다! 'objc [3396] : fork()가 호출되었을 때 다른 스레드에서 + [NSEvent initialize]가 진행 중일 수 있습니다. fork() 자식 프로세스에서 안전하게 호출하거나 무시할 수는 없습니다. 대신 충돌. 디버깅 할 objc_initializeAfterForkError에 중단 점을 설정하십시오.''p1.start()'를 제거해야합니까? – solo

+0

@rrod 플랫폼 문제 같은 것 같습니다. 파이썬과 관련이 없습니다. 빠른 [google 검색] (https://www.google.co.in/search?q=objc%5B3396%5D%3A+%2B%5BNSEvent+initialize%5D+may+have+been+in+progress+in + another + thread + when + fork() + was + oq = objc % 5B3396 % 5D % 3A + % 2B % 5BNSEvent + 초기화 % 5D + 초기화 + 완료 + 진행 + in + 다른 + thread +() + was + asqs = chrome..69i57.391j0j7 & sourceid = chrome & ie = UTF-8)가 도움이 될 수 있습니다. 이것이 도움이되지 않으면 다른 질문을 할 수 있습니다. 이 대답은 함수를 병렬로 호출하는 원래의 문제를 해결합니다. –