병행성과 병렬성
병행성(Concurrency) : 한 컴퓨터가 여러 일을 동시에 수행 → 단일 프로그램안에서 여러일을 쉽게 해결 (멀티태스킹)
병렬성(Parallelism) : 여러 컴퓨터가 여러 작업을 동시에 수행
Generator란
Generator 는 yield를 통해 메인루틴에 값을 반환하는 것으로 사용될 수 있기 때문에 병행성을 구현할 때 활용이 될 수 있다.
Generator 를 정의할 수 있는 방법은 두가지 방식이 있는데, 하나는 함수와 yield를 사용하는 방법이고, 하나는 소괄호 내에 Comprehension 으로 정의하는 방식이다 (Generator Expression 이라고 불리며, Tuple 타입과는 아무 연관성이 없다)
# Generator 정의 방법 1
def generator_num():
print('Start')
yield 'first'
print('continue')
yield 'second'
print('End')
# Generator 정의 방법 2
generator_num = (word for word in ['first', 'second'])
Python에 기본적으로 내장되어 있는 유용한 Generator 함수들
import itertools
# 수를 생성하는 count : 1부터 2.5씩 증가하는 수를 무한대로 return
gen1 = itertools.count(1, 2.5)
print(next(gen1))
# 조건을 정의하는 takewhile : 1부터 2.5씩 증가하는 수를 1000 미만까지 return
gen2 = itertools.takewhile(lambda n : n < 1000, itertools.count(1, 2.5))
# 반대필터
gen3 = itertools.filterfalse(lambda n : n < 3, [1,2,3,4,5])
for v in gen3:
print(v)
# 누적합
gen4 = itertools.accumulate([x for x in range(1, 101)])
for v in gen4:
print(v)
# 연결
gen5_1 = itertools.chain('ABCDE', range(1,11,2))
print(list(gen5_1)) # ['A', 'B', 'C', 'D', 'E', 1, 3, 5, 7, 9]
gen5_2 = itertools.chain(enumerate('ABCDE'))
print(list(gen5_2 )) # [(0, 'A'), (1, 'B'), (2, 'C'), (3, 'D'), (4, 'E')]]
# 개별
gen6_1 = itertools.product('ABCDE')
print(list(gen6_1)) # [('A',), ('B',), ('C',), ('D',), ('E',)]
# 순열(repeat 개)
gen6_2 = itertools.product('AB', repeat=2)
print(list(gen6_2)) # [('A', 'A'), ('A', 'B'), ('B', 'A'), ('B', 'B')]
# 그룹화
gen7 = itertools.groupby('AAABBCCCCDDEEE')
for char, group in gen7:
print(char, ' : ', list(group))
"""
A : ['A', 'A', 'A']
B : ['B', 'B']
C : ['C', 'C', 'C', 'C']
D : ['D', 'D']
E : ['E', 'E', 'E']
"""
Futures 라이브러리와 파이썬 병렬성 구현 - GIL, concurrent.futures (0) | 2022.05.12 |
---|---|
코루틴 (Coroutine) (3) - 개념, 장점, 구현 (0) | 2022.05.11 |
코루틴 (Coroutine) (1) - Iterator 와 Generator (0) | 2022.05.11 |
클로저 (Closure) (2) - 클로저 개념 및 구현 (0) | 2022.05.09 |
클로저 (Closure) (1) - 일급함수 (First-class function) (0) | 2022.05.06 |
댓글 영역