English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Python에서 프로세스 동기화와 풀링

프로세스 간 동기화

다중 처리는 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