파이썬 질문.

이창준   
   조회 1612   추천 0    

 안녕하세요. 이창준입니다.~

파이썬 코딩 중 막히는 부분이 있어 질문 드립니다. 2CPU에서는 해결 가능성을 확신합니다.^^

import concurrent.futures

class Test():
    def __init__(self):
        super().__init__()
        self.job_list = ['aa', 'bb']
        self.run()

    def run(self):

        def aa():
            print('aa')
            return

        def bb():
            print('bb')
            return

        with concurrent.futures.ThreadPoolExecutor() as executor:
            # data_list = executor.submit(locals()['aa']()) # 정상 작동
            data_list = [executor.submit(locals()[job]()) for job in self.job_list] # key에러 발생

Test()

위의 코드 중 run 메서드 내 

# data_list = executor.submit(locals()['aa']()) 는 정상 작동되나, 

data_list = [executor.submit(locals()[job]()) for job in self.job_list] 의 경우, 키 에러가 발생합니다. locals()내 각각의 메서드가 딕셔너리 형태로 나타납니다만 에러가 발생하네요.

고수분들께 도움을 요청합니다.

짧은글 일수록 신중하게.
구차니 2022-09
숙제인가요?
     
이창준 2022-09
아니요.^^ 숙제라면 선생님께 물어봐야죠.^^
취미로 공부를 하고 있는데 구굴링으로 답을 못 찾았네요.^^
          
구차니 2022-09
파이썬이랑 안친한데..
일단 for job in 구문에서 job 변수의 유효범위(scope)를 공부해 보셔야 할 것 같습니다.
timeleaf 2022-09
for job in self.job_list:
    executor.submit(locals()[job]()
이러면 되는데 굳이 data_list로 저장하는 이유가 있나요?
     
이창준 2022-09
호출 메서드에 리턴값을 처리하기 위해 리스트로 받고 .result()로 처리하기 위함입니다. 위의 예제에서는 말씀처럼 단순 for문으로 처리가 가능합니다만, Threading처리에서 리턴값을 처리하기 위해서는 리스트(concurrent.future)를 처리해야 하더군요. 더 좋은 솔루션이 있으면 조언 부탁드립니다.
     
이창준 2022-09
말씀처럼...
        data_list = []
        with concurrent.futures.ThreadPoolExecutor() as executor:
            for job in self.job_list:
                data_list.append(executor.submit(locals()[job]()))
단순 for문으로 리스트를 넣는 방법은 동작을 하네요. ^^
허나 왜!!!^^ 컴프리핸션 형태는 문제가 생기는지..허허..요상합니다.
r510 2022-09
뭘 의도하는건지 모르겠지만, 여러 작업 결과물 모으는거면 락 있는 contextvar 사용하세요
이창준 2022-09
관심 주신 분들께 감사드립니다.


QnA
제목Page 491/5724
2015-12   1762960   백메가
2014-05   5237284   정은준1
2022-01   2284   ocarina
2022-01   3149   술이
2013-06   9799   호퍼
2014-11   3515   천외천oo노…
2013-06   5864   이윤주
2014-11   7431   가빠로구나
2016-02   4214   복실강아지
2022-01   2751   정선생
2023-09   2564   kinyou
2014-11   3862   fLog
2018-04   4501   석호
2023-09   1184   2CPU최주희
2014-11   5195   amplifier
2013-07   5787   comduck
2014-12   12775   반주기
2016-02   4234   차분하게하자
2017-02   5897   나파이강승훈
2010-07   8368   무슨생각
2016-02   6088   우끼끼끼
2017-02   6950   은우마스터