2014-11-24 4 views
0

두 개의 프로세스 또는 스레드를 사용하여 실행하려는 python 스크립트가 있습니다. 두 개의 라이센스 만있는 API/링크에 연결하기 때문에 두 개로 제한됩니다. 모듈을 가져 와서 클래스를 인스턴스화하여 라이센스를 얻습니다. 여기에 내 문제가 있습니다 :sqlite3 및 matplotlib를 사용하는 파이썬 스레딩 또는 다중 프로세스 질문

  1. 나는 sqlitedb3에 쓸 필요가있다. db 연결을 공유하고 "작업자"에게 전달하고 자체 커서를 만들려고했지만 "데이터베이스가 잠겼습니다"라는 메시지가 계속 표시됩니다. 아무리 오래 다시 시도해도 잠금이 명확하지 않습니다. 내 프로그램은 약 5 분 동안 모델에서 데이터를로드 한 다음 약 1 분 동안 데이터를 처리하고 DB에 삽입하는 데 소비합니다. 그런 다음 끝에 다음 모델로 넘어 가기 전에 commit()을 수행합니다.

  2. 데이터베이스에 쓴 후에는 matplotlib을 사용하여 일부 플롯과 이미지를 만든 다음 고유 한 이름으로 파일에 저장합니다. 나는 계속 "QApplication이 main() 쓰레드에서 생성되지 않았다"와 "Xlib : 예기치 않은 비동기 응답"을 계속 얻었다. 스레딩에서 다중 프로세스로 전환하는 것이 도움이 될 수도 있습니다.

  3. 두 스레드 또는 프로세스 만 동시에 실행되도록하고 싶습니다. 이것을 달성하는 가장 좋은 방법은 무엇입니까? 스레딩을 통해, 내가하고 있던 다음

    c1 = load_lib_get_license() 
    c2 = load_lib_get_license() 
    
    prc_list = list of models to process 
    
    while (len(prc_list) > 0): 
        if not t1.is_alive(): 
         t1 = threading.Process(target=worker,args=(c1,db_connection,prc_list.pop(0)) 
         t1.start() 
        if not t2.is_alive(): 
         t2 = threading.Process(target=worker,args=(c2,db_connection,prc_list.pop(0)) 
         t2.start() 
        while (t1.is_alive() and t2.is_alive(): 
         sleep(1) 
    
+0

을 고객? 가져온 파이썬 모듈입니까? 나중에 어떻게 다시로드합니까? – tdelaney

+0

몇 가지 조사를 한 후 내 문제가 다르기 때문에 위의 내용을 편집했습니다. – eng3

답변