60,500원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
동시처리 처리 적용 방안
아래와 같은 프로그램을 만들때 어떤 방식으로 병렬처리를 구성 하면 될까요 ?조건 1 : 외부 통신 (시리얼) 로 물체의 감지 여부 (스트림 수신데이터) 를 계속 적으로 확인 해야 한다. 조건 2: 조건 1에서 물체가 감지 되었을때, 카메라의 영상을 가져온다. 조건 3: 조건 2에서 가져온 영상데이터를 다양한 처리를 하여 결과를 산출한다 (시간이 걸리는 작업) ——현재 문제점—조건 3에서 시간이 걸리기 때문에 조건 1의 감지가 실행 되지 않는 문제 제가 생각하는 루틴 Producer-Consumer Pattern 패턴 적용 조건 1에서 물체 감지 —생산자—조건 2에서 Queue 에 카메라 영상 저장 —소비자—조건 3에서 Queue 에 카메라 영상을 가져와 처리 질문 1 : 위와 같은 경우 어떤 병렬처리를 적용하면 제일 좋을까요 ? 질문 2 : Producer-Consumer Pattern 패턴 적용 시 “py_ad_1_7.py” 조건3에서 오래 걸리는 작업을 실행 시 조건 1도 중간 중간 실행 할수 있을까요 ? 감사합니다.
- 미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
3_5_4.py asyncio 에서 response.status_code 실행 문제
안녕하세요 강사님,앞서 synchronous, threading, multiprocessing 에서는print(f'[Read Contents : {len(response.content)}, Status Code : {response.status_code} from {url}]') 잘 실행이 되어, status code: 200 값을 확인 할 수 있었습니다.그런데 asyncio에서는 response.status_code가 출력이 안됩니다.강사님 설명처럼, 그냥 response 값 전체를 출력하면 확인할 수 있지만.. asyncio에서는 왜 response.status_code 가 실행이 안되는지 설명 좀 부탁 드리겠습니다.
- 미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
Multiprocessing(4) - Sharing state 에서 공유가 안되는 원인
안녕하세요 강사님,Sharing state에서 메모리 공유가 안되는 결과 값으로 질문이 많은것 같습니다. 그래서 강제로 with v.get_lock()을 설정해 주는 분들도 계시지만, 강사님 코딩 중에 for p in process: p.join() 부분의 위치가 잘 못 되어서 그런 문제가 발생 한 것 같습니다. 아래와 같이 코딩을 수정 하면, 메모리 공유가 잘 실행됩니다. 그런데 process.join()을 processes.append(p) 할때 마다 join을 하는게 아니라, 원래 강사님 코딩처럼 processes 리스트에 append가 다 끝난상태에서 join을 해 주는게 맞는것 같은데.. 그럴경우 결과 값은 공유가 풀린 상태가 된 결과 값이 나옵니다.1_3 강의 내용에는 x.start() 후 바로 x.join() 처리를 하셨는데, 바로 처리하는게 맞다면, 굳이 리스트 설정 없이 아래 처럼 코딩을 하면 될 것 같습니다. 이 문제에 대해 강사님의 의견을 구하고자 합니다.
- 미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
multiprocessing(4) - sharing state 공유 변수 출력 값 예상치와 다를 때
환경 차이(Python 3.8 + M1 Pro) 인지는 모르겠습니다만 저 같은 경우는 기대값이 50씩 증가되어 최종 450이 나오질 않더군요. 다른 분도 마찬가지면 참고하라고 아래 코드 넣습니다.def generate_update_number(v: int): with v.get_lock(): for _ in range(50): v.value += 1 print(current_process().name, 'data', v.value)
- 미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
async 와 cpu bound 함수 질문
강사님, 저는 I/O bound 가 있을때만 async 를 써서 제어권을 넘기고, I/O bound 처리가 끝나면 제어권이 다시 넘어가서 실행하면 된다고 이해를 했는데요,그렇다면 혹시 func_a 라는 async 함수 내에서 다른 함수 func_b 를 부르는데, 이 func_b 함수가 cpu 연산만 하는 함수라면 async로 만들고, await func_b로 호출해도 의미가 없는건가요?? 이런 경우는 func_b 는 그냥 일반함수로 만들어야 하는 건가요?? func_b가 I/O bound 가 필요한 함수가 아니라서 굳이 다른데로 제어권을 넘길 필요가 없어 보여서요~
- 미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
변수 자동생성에 관하여
안녕하세요 강의 잘 들었습니다.다름이 아니라 파이썬 클래스 내부변수(self.~)를 혹시 자동으로 여러 개 생성해주는 방법이 없을까요?전역변수 자동생성은 for i in range(num): global()[var_{}.format(i)]=~로 생성할 수 있는건 아는데, 클래스 내부변수나 지역변수를 자동으로 생성하는 방법이 있을까요?감사합니다.
- 미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
공유변수가 있을때만 동기화를 사용하나요?
멀티쓰레드 사용시 클래스 호출 안하고, 함수만 호출하는데 함수 내부변수는 해당 함수에서만 유효하다고 알고 있기에 락 안걸어도 될까요?
- 미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
I/O Bound(2) - threading vs asyncio vs multiproces 질문
threading과 multiprocessing, asyncIO 등의 예시 코드들을 보여주시는데, 1. 그러면 threading과 multiprocessing은 동기식이라고 볼 수 있나요? 2. threading과 multiprocessing, asyncIO 들이 blocking인지 nonblocking인지는 코드에 따라서 달라지는 것인가요?
- 미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
프로세스 생성 관련
멀티프로세스 생성을 위해서 multiprocessing.Pool()을 사용하는데 ProcessPoolExecutor() 을 사용안하는게, initializer를 설정하기 위해서 인가요?
- 미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
I/O Bound(1) - Synchronous 질문입니다
1. 해당 수업에서 I/O Bound Sync 예제에 대해서 설명을 해주셨는데 그러면 여태까지 배웠던 쓰레드들(싱글쓰레드, 동기화, 생산자 소비자 등)와 프로세스들(멀티프로세스, 메모리공유, 파이프, 큐 등) 을 활용해서 CPU Bound, I/O Bound 들을 구현하는 것인가요? 2. 여태까지 배웠던 쓰레드들과 프로세스들 구현은 CPU Bound라고 볼 수 있는지 궁금합니다 3. request를 통해서 서버에서 가져오는 것이니까 I/O bound를 구현했다고 볼 수 있는 것인가요? 4.실시하려고 하는 작업이 I/O Bound, CPU Bound 인지 구분하는 방법이 따로 있는지 궁금합니다
- 미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
multiprocessing(5) - Queue, Pipe 질문입니다
이전 강의에서 Value 또는 Array를 활용해서 공유하는 변수의 값에 접근할 수 있었는데, Queue와 파이프는 프로세스간 통신이라고 하셨습니다. 그러면 결국 공유하는 변수의 값에 접근하는 것과 비슷한것 같은데, 차이점이 무엇인지 헷갈려서 질문 드립니다!
- 미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
Prod and Cons 관련 질문입니다
이전 강의에서 lock과 acquire를 활용해서 동기화 문제를 해결했는데 Prod and Cons 패턴을 굳이 사용하는 이유는 Prod and Cons 패턴이 이전 lock과 acquire를 사용하는 것보다 더욱 효율적이어서 사용을 하는 것인가요?
- 미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
with ThreadPoolExecutor(max_workers=3) as excutor: 로 쓰레드 생성 문의
궁금한게 있는데, 아래와 같이 쓰레드를 발생시킬 때 데몬을 활성화 시킬 수 있나요. with ThreadPoolExecutor(max_workers=3) as excutor: tasks = excutor.map(task, ['First', 'Second']) 기존 방식 threading.Thread(target=thread_func, args=('First',), daemon=True) 은 이렇게 가능하다고 수업을 들었는 데, 위 방법으로도 데몬 활성화가 가능한가요? 가능하면 어떻게 하면 되는 지? 문의 드립니다.
- 미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
실행방법 2 에서 질문
안녕하세요 수업을 듣다가 궁금하여 질문 올립니다. with ThreadPoolExecutor(max_workers=3) as excutor: tasks = excutor.map(task, ['First', 'Second']) tasks라는 변수에 excutor map형식으로 여러개의 task를 for 반복문을 이용하여 사용할 수 있는지 궁금합니다.
- 미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
multiprocessing(4) - Sharing state 8분 21초 질문입니다
프로세스에서 주소공간이 독립적라는 걸 2_5_1 예제를 통해서 공유가 안되는 걸 설명해주시고 2_5_2 에서는 공유가 되는 걸 보여주셨는데, 그럼 주소공간은 독립적이고 주소가 아닌 값만 공유를 하는 것인 건가요? 주소 공간과 데이터를 별개로 봐야 하는 건가요?
- 미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
multiprocessing(2) - Naming, Parallel processing 에서 10분 33초 부분 질문입니다
f __name__ == "__main__": # 부모 프로세스 아이디 parent_process_id = os.getpid() # 출력 print(f"Parent process ID {parent_process_id}") # 프로세스 리스트 선언 processes = list() # 프로세스 생성 및 실행 - 가장 기본적인 구조 for i in range(1, 10): # 1 ~ 100 적절히 조절 # 생성 t = Process(name=str(i), target=square, args=(i,)) # 배열에 담기 - 한번에 join을 하려고 리스트에 담음 processes.append(t) # 시작 t.start() # Join - 한번에 join!! for process in processes: process.join() # 종료 print("Main-Processing Done!") 해당 부분에서 t.start을 할 때 i=1부터 9까지의 프로세스들이 순차적으로 동작을 하는 것 아닌가요? 운영체제에서 할당을 해서 순서가 랜덤으로 된다고 이해를 했는데 혹시 pc에서 프로세스들을 할당받는 속도가 빨라서 거의 동시에 할당받는 것처럼 생각해, 랜덤의 순서로 프로세스 스케줄링 해주는 것인가요?
- 미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
Array로 공유 리스트 변수 생성방법 질문
강사님 안녕하세요. 강의에서 말씀해주셨던 Manager 방식이 아닌 Array로 공유리스트 변수 생성하는 방법에 대해 질문드립니다. 1) Array("i", range(5)) 과 같은 형태로 생성한 공유 리스트 변수에 append하는 방법이 궁금합니다. 아래 코드로 실행하면 :AttributeError: 'SynchronizedArray' object has no attribute 'append' 에러가 발생합니다. 2) 변수 생성 시점에서 range( )의 값은 몇으로 정의하든 상관이 없나요? 지금은 예시로 range(5)로 했지만 리스트 안에 값이 얼마나 글어갈지 모르는 상황이라면 어떻게 정의해주어야 하는지 알 고 싶습니다. 아래 코드 전달드립니다. 감사합니다. from multiprocessing import current_process, Process, Array, Manager, freeze_support import time import os def cpu_bound(number, total_lst): process_id = os.getpid() process_name = current_process().name print(f"Process ID : {process_id}, Prcoess Name : {process_name}") total_lst.append(sum(i*i for i in range(number))) def main(): numbers = [3_000_000 + x for x in range(10)] # 프로세스 리스트 선언 processes = list() # 프로세스 공유 매니저 manager = Manager() # 리스트 획(프로세스 공유) #total_list = manager.list() total_list = Array("i",range(5)) # 프로세스 생성 및 실행 for i, num in enumerate(numbers): p1 = Process(name=str(i), target=cpu_bound, args=(num, total_list,)) # 배열에 담 processes.append(p1) p1.start() # Join for process in processes: process.join( ) start_time = time.time() print(f"total list = {total_list}") print(f"Sum = {sum(total_list)}") duration = time.time()-start_time print(f"Duratrion = {duration} sec") if __name__=="__main__": main( )
- 미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
멀티프로세싱 구현 시 플라스크 서버 구성
안녕하세요. 강사님의 강의 유익하게 듣고 있습니다. 제가 강사님의 풀스택 백엔드와 해당 병렬처리 강의를 듣는 도중 질문사항이 있어 질의 드립니다. 현재 AI로 영상 디텍션을 하는 코드를 구현하고 해당 코드에 대해 연결된 영상장치 갯수만큼 멀티프로세스를 통해 자식 프로세스를 생성하여 돌리는 형태로 코드를 구성하였습니다.(cctv가 4개면 멀티프로세싱을 통해 동일한 기능을 채널4개에 대해 동작하는 형태) 클라이언트에서 변경사항이 발생하면 API를 통해(flask) 값을 변경하려 할 경우, 변경하고자 하는 cctv 채널에 변경값을 전달하는 방법이 궁금합니다. 아래 두 방법 중 어느 방법이 효율이 좋은 것인지, 아니면 둘다 좋지 못한 방법인지 질문드립니다. 1) 메인 프로세스에 플라스크 서버 하나를 구성한 후 특정 채널의 변경이 발생하면 해당채널(자식프로세스)과 설정한 공유메모리를 통해 값을 전달하는 방법 2) 각 자식프로세스를 생성할 때마다 플라스크 서버를 생성하여 직접 채널별 API를 구성하는 방법 두 수업을 듣다보니 어느쪽에 질의를 올릴지 애매해서 이곳에 올리게 되었습니다.
- 미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
메인 시작 영역에 관한 질문
강사님 안녕하세요, #메인 시작 영역에 관해 질문드립니다. main( ) 함수 실행시 if __name__ == "__main__" 영역 밖에서 실행했을 때 Runtime Error가 발생하던데, 왜 그런지 알고 싶습니다. (Threading에서는 if __name__=="main" 영역 밖에서 실행했을 때 정상적으로 작동하는 것 같은데 말입니다) 아래 전체 코드 드립니다. 감사합니다. from multiprocessing import Process import time import logging def process_func(name): print(f"subprocess {name} stated") time.sleep(3) print(f"subprocess {name} stated") def main(): format = "%(asctime)s: %(message)s" logging.basicConfig(format=format, level=logging.INFO, datefmt="%H:%M:%S") # 함수 인자 확인 p = Process(target=process_func, args=('First',)) logging.info('Main_process : before Creating') p.start() logging.info('Main_process : Sub Process stated') logging.info(f'Main_prcess : Status: {p.is_alive()}') p.join() logging.info(f'Main_prcess : Status: {p.is_alive()}') logging.info('Main_process : Sub Process finished') # if __name__=="__main__": main()
- 미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
await질문드립니다
3_5_4에서 asyncio.ensure_future앞에는 await없고 await asyncio.gather앞에는 await이 있는 이유가 궁금합니다