반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 코딩
- 사이버보안
- 자료구조
- 딥러닝
- 소프트웨어
- 2
- 인공지능
- 데이터베이스
- 프로그래밍
- 보안
- 소프트웨어공학
- 데이터분석
- 네트워크보안
- 데이터구조
- 알고리즘
- 파이썬
- 빅데이터
- 버전관리
- 프로그래밍언어
- 데이터과학
- 네트워크
- 클라우드컴퓨팅
- 자바스크립트
- 웹개발
- 컴퓨터비전
- 컴퓨터과학
- Yes
- 머신러닝
- 컴퓨터공학
- I'm Sorry
Archives
- Today
- Total
스택큐힙리스트
파이썬의 Concurrent.Futures 모듈을 이해하려고 노력하고 있습니다. 본문
반응형
저는 파이썬 3.2.2에서 concurrent.futures
모듈을 사용하는 방법을 이해하려고 노력하고 있습니다. 문서에서 제공하는 예제들을 사용하며 연습을 하고 있습니다. 이해한 내용을 적용해보려 할 때, 제 자신의 예제들이 실패합니다. 누군가가 저를 도와주어 진행방향을 설정해주길 바랍니다!
동시에 그리고 비동기적으로 여러 프로세스를 실행할 수 있도록 설정하고 싶습니다. 제 프로세스는 아무 값도 반환하지 않습니다. 이를 시뮬레이션하기 위해 간단한 예제를 작성했습니다:
import concurrent.futures
fred = [1,2,3,4,5,6,7,8,9,10]
def f(x):
print(x * x)
def main():
with concurrent.futures.ProcessPoolExecutor() as executor:
for num in fred:
executor.submit(f, num)
if __name__ == __main__:
main()
이 코드는 (4개의 코어를 가진 Windows XP 컴퓨터에) 실행되고 다음을 반환합니다:
1 4 9 16 25
...그러나 그 후로는 멈춰있습니다.
분명히 저는 무언가 잘못하고 있습니다. 그래서 파이썬에서 프로세스를 프로세스 풀에서 실행하는 옳은 방법은 무엇인가요? 저는 executor.map
방식을 사용하기 원하지 않습니다, 왜냐하면 저는 프로세스로부터 반환값이 없기 때문입니다.
혹시... 가짜 반환값으로 True
나 False
(또는 다른 것)를 반환하도록 하여 가짜로 하는 수밖에 없을까요?
감사합니다!
답변 1
나는 왜 executor.map
을 사용하지 않으려고 하는지 이해하지 못합니다... 실제로 당신의 f
함수로 값을 반환하지 않는 함수로 실행해 봤는데 아무 문제 없이 작동했습니다...
이제, map
으로 실행하면 실제로 값들을 출력하지는 않지만, 여기에 당신의 값들을 출력하는 f
함수 버전이 있습니다:
import concurrent.futures
fred = [1,2,3,4,5,6,7,8,9,10]
def f(x):
return x * x
with concurrent.futures.ProcessPoolExecutor() as executor:
for num in executor.map(f, fred):
print(num)
답변 2
파이썬의 Concurrent.Futures 모듈은 동시에 여러 작업을 처리하고 실행시키는 강력한 도구입니다. 이 모듈은 파이썬 3.2 이상에서 사용할 수 있으며, 스레드와 프로세스를 비동기적으로 실행시키기 위한 표준 라이브러리입니다.Concurrent.Futures 모듈은 효율적이고 쉽게 병렬 처리를 구현할 수 있도록 도와줍니다. 이를 통해 큰 규모의 작업을 더 빠르게 실행할 수 있으며, CPU 및 I/O 바운드 작업을 동시에 처리할 수 있습니다. 비동기 작업을 통해 속도를 향상시킬 수 있고, 전체적인 성능을 향상시킬 수 있습니다.
이 모듈은 두 가지 주요 인터페이스를 제공합니다. 첫 번째는 ThreadPoolExecutor 인터페이스로, 스레드 기반의 동시성 작업을 실행시킬 수 있습니다. 두 번째는 ProcessPoolExecutor 인터페이스로, 여러 개의 프로세스를 사용하여 병렬 처리를 실행시킬 수 있습니다. 두 인터페이스는 각각 Executor 추상 클래스로부터 상속받습니다.
Concurrent.Futures 모듈을 사용하면 간단하게 작업들을 실행하고, 그 결과를 가져올 수 있습니다. 예를 들어, 지금까지 하나의 작업을 기다리고 결과를 얻기 위해 threading 또는 multiprocessing을 사용하였다면, Concurrent.Futures 모듈을 사용하면 이러한 작업을 더 효율적으로 처리할 수 있습니다.
또한, 이 모듈은 이벤트 처리에 유용합니다. 작업마다 Future 객체를 반환하고, 각각의 작업이 실행을 완료할 때까지 기다릴 수 있으며 결과를 확인할 수 있습니다. 이벤트 처리를 통해 서로 다른 작업들이 서로 의존하는 경우에도 간편하게 작업을 조정할 수 있습니다.
또한, Concurrent.Futures 모듈은 에러 처리를 보다 용이하게 만들어줍니다. 작업 중 발생하는 예외를 처리하고, 예외 발생 시 다른 작업에 영향을 주지 않고 작업을 계속할 수 있습니다. 또한, 작업이 완료된 이후에도 결과를 검사하고 적절한 후속 작업을 수행할 수 있습니다.
이와 같이, 파이썬의 Concurrent.Futures 모듈은 동시 작업 처리와 병렬 처리를 효율적으로 구현하기 위한 강력한 도구입니다. 이 모듈은 쉽고 직관적인 인터페이스를 제공하며, 작업들 사이의 의존성을 처리하고 에러 처리를 보다 간편하게 할 수 있습니다. 따라서 이 모듈을 활용하여 파이썬 코드의 성능을 향상시킬 수 있고, 더욱 효율적인 프로그래밍을 할 수 있습니다.
반응형
Comments