English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
다중 처리는 API를 사용하여 프로그램을 생성하는 프로그램 패키지입니다. 이 소프트웨어 패키지는 로컬 및 원격 병행 사용을 위해 사용됩니다. 이 모듈을 사용하면 프로그래머가 주어진 컴퓨터에서 여러 프로세서를 사용할 수 있습니다. 이는 Windows와 UNIX 운영 체제에서 실행될 수 있습니다.
이 프로그램 패키지는 모든 동기화 원语를 포함하고 있습니다。
from multiprocessing import Process, Lock def my_function(x, y): x.acquire() print('hello world', y) x.release() if __name__ == '.__main__': lock = Lock() for num in range10): Process(target=my_function, args=(lock, num)).start()
여기서는 인스턴스가 잠금을 사용하여 한 번에 하나의 프로세스만 표준 출력을 표시할 수 있도록 합니다.
풀을 사용할 때, Pool 클래스를 사용합니다. 누군가가 프로세스 풀을 생성할 때, 그것은 제출된 모든 작업을承载합니다.
class multiprocessing.Pool([processes[, initializer[, initargs[, maxtasksperchild]]]])
프로세스 풀을 제어하여 제출할 작업을 선택하는 풀 객체로, 비동기 결과, 타임아웃, 콜백 및 병렬 맵 구현을 지원합니다.
프로세스가 비어 있으면 cpu_count()를 사용합니다. 초기화가 nonNone이면 initializer(* initargs)를 호출합니다.
apply(func[, args[, kwds]])
이는apply()
내장 함수와 동일합니다. 결과가 준비되기 전까지 블록합니다. 병렬 실행을 원하면 apply_async() 메서드가 더 좋습니다.
apply_async(func[, args[, kwds[, callback]]])
결과 객체를 반환합니다.
map(func, 이터레이블[, chunksize])
map()는 내장 함수로, 단일 이터레이블 파라미터를 지원합니다. 결과가 준비되기까지 블록합니다.
이 메서드에서, 이터레이블은 많은 작은 부분으로 분해되고, 이 부분들을 독립적인 작업으로 프로세스 풀에 제출합니다.
map_async(func, iterable[, chunksize[, callback]])
결과 객체를 반환합니다.
imap(func, iterable[, chunksize])
itertools.imap()와 동일합니다.
파라미터 크기는 사용된 것과 동일합니다map()
.
imap_unordered(func, iterable[, chunksize])
이는imap()
이터레이터의 순서를 다시 설정합니다.
닫기()
작업자가 모든 작업을 완료한 후, 작업자가 스트림을 탈출합니다.
종료()
작업을 완료하지 않고 즉시 작업 프로세스를 중지하려면 이 메서드를 사용합니다.
가입()
사용할 때join()
메서드 전에 반드시 사용해야 합니다close()
와terminate()
함수.
class multiprocessing.pool.AsyncResult
Pool.apply_async()와 Pool.map_async()로부터 반환됩니다.
get([타임아웃])
이 함수는 도달할 때 결과를 반환합니다.
대기([타임아웃])
이 기능을 사용하여 결과가 사용 가능하거나 타임아웃 초가 지나기를 기다립니다.
준비()
이 함수는 호출이 완료되었는지 여부를 반환합니다.
성공()
호출이 완료되면 어떤 오류도 없습니다. 이 함수는 반환됩니다.
# -*- coding: utf-8 -*- """ Created on Sun Sep 30 12:17:58 2018 @author: oldtoolbag.com """ from multiprocessing import Pool import time def myfunction(m): return m*m if __name__ == '.__main__': my_pool = Pool(processes=4) # start 4 worker processes result = my_pool.apply_async(myfunction, (10,)10))" asynchronously in a single process print (result.get(timeout=1)) print (my_pool.map(myfunction, range(10)) # prints "[0, 1, 4,..., 81])" my_it = my_pool.imap(myfunction, range(10)) print (my_it.next() ) # prints "0" print (my_it.next() ) # prints "1" print (my_it.next(timeout=1) ) # prints "4" unless your computer is *very* slow result = my_pool.apply_async(time.sleep, (10,) print (result.get(timeout=1) ) # raises multiprocessing.TimeoutError