나는 항목의 목록이 아래 rows
에 표시되는 빈도를 계산하는 기능이 있습니다, 현실에서함수 내에서 병렬 처리가 가능합니까?
def count(pair_list):
return float(sum([1 for row in rows if all(item in row.split() for item in pair_list)]))
if __name__ == "__main__":
pairs = [['apple', 'banana'], ['cookie', 'popsicle'], ['candy', 'cookie'], ...]
# grocery transaction data
rows = ['apple cookie banana popsicle wafer', 'almond milk eggs butter bread', 'bread almonds apple', 'cookie candy popsicle pop', ...]
res = [count(pair) for pair in pairs]
을 len(rows)
은 10000
하고 18000
요소 pairs
에있다, 그래서 count()
의 지능형리스트의 컴퓨팅 비용 주요 기능에있는 것이 비쌉니다. 어느 쪽이 빨리 실행되지 않습니다
from multiprocessing.dummy import Pool as ThreadPool
import multiprocessing as mp
threadpool = ThreadPool(processes = mp.cpu_count())
res = threadpool.map(count, pairs)
:
는 좀 병렬 처리를 시도했다. 실제로, 15 분 후에, 나는 끝내고 있기 위하여 보지 않기 때문에 다만 일을 그만 뒀다. 두 가지 질문 : 1)count()
에서 이루어지는 실제 검색 속도를 높이려면 어떻게해야합니까? 2)
threadpool.map
프로세스의 상태를 확인하려면 어떻게해야합니까? 즉, 반복 할 페어의 수는 몇 개인 지 확인하십시오.
큰 '행'을 공유하는 중입니다. chunkksize = 100을'map'에 전달하십시오. – khachik
및 진행에 대한 질문 - imap을 사용하십시오. – khachik
나는 진짜 문제가'count()'에있는 목록 이해력이어야한다고 생각한다. 그게 병목 현상이 아닐까요, 여기,'쌍 (pair)'의 모든 p를 반복하여'count (p)'를 얻는 것일까 요? – blacksite