멀티프로세싱 모듈은 Python 라이브러리에서 가장 발전되고 강력한 모듈 중 하나입니다. 이 기사에서는 다중 처리의 일반적인 기술에 대해 간략하게 소개합니다.
프로세스는 시스템 자체에서 관리됩니다.
1: 가장 기본적인 작성 방법
from multiprocessing import Pool def f(x): return x*x if __name__ == '__main__': p = Pool(5) print(p.map(f, [1, 2, 3])) [1, 4, 9]
2 실제로 os.fork 방식을 통해 프로세스가 생성됩니다
유닉스에서는 모든 프로세스가 포크 방식으로 생성됩니다.multiprocessing Process os info(title): title , __name__ (os, ): , os.getppid() , os.getpid() f(name): info() , name __name__ == : info() p = Process(=f, =(,)) p.start() p.join()3. 스레드 공유 메모리
threading run(info_list,n): info_list.append(n) info_list __name__ == : info=[] i (): p=threading.Thread(=run,=[info,i]) p.start() [0] [0, 1] [0, 1, 2] [0, 1, 2, 3] [0, 1, 2, 3, 4] [0, 1, 2, 3, 4, 5] [0, 1, 2, 3, 4, 5, 6] [0, 1, 2, 3, 4, 5, 6, 7] [0, 1, 2, 3, 4, 5, 6, 7, 8] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]프로세스는 메모리를 공유하지 않습니다. 🎜 >
multiprocessing Process run(info_list,n): info_list.append(n) info_list __name__ == : info=[] i (): p=Process(=run,=[info,i]) p.start() [1] [2] [3] [0] [4] [5] [6] [7] [8] [9]
메모리를 공유하려면 Queue를 사용해야 합니다
multiprocessing Process, Queue f(q,n): q.put([n,]) __name__ == : q=Queue() i (): p=Process(=f,=(q,i)) p.start() : q.get()
4 .잠금: 화면 공유 전용, 프로세스가 독립적이므로 여러 프로세스에 유용하지 않음
multiprocessing Process, Lock f(l, i): l.acquire() , i l.release() __name__ == : lock = Lock() num (): Process(=f, =(lock, num)).start() hello world 0 hello world 1 hello world 2 hello world 3 hello world 4 hello world 5 hello world 6 hello world 7 hello world 8 hello world 9
5. 프로세스 간 메모리 공유: 값, 배열
multiprocessing Process, Value, Array f(n, a): n.value = i ((a)): a[i] = -a[i] __name__ == : num = Value(, ) arr = Array(, ()) num.value arr[:] p = Process(=f, =(num, arr)) p.start() p.join() 0.0 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 3.1415927 [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
#manager 공유 방법이지만 느림
multiprocessing Process, Manager f(d, l): d[] = d[] = d[] = l.reverse() __name__ == : manager = Manager() d = manager.dict() l = manager.list(()) p = Process(=f, =(d, l)) p.start() p.join() d l # print '-------------'这里只是另一种写法 # print pool.map(f,range(10)) {0.25: None, 1: '1', '2': 2} [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
#Async: this 이 쓰기 방법은 거의 사용되지 않습니다
multiprocessing Pool time f(x): x*x time.sleep() x*x __name__ == : pool=Pool(=) res_list=[] i (): res=pool.apply_async(f,[i]) res_list.append(res) r res_list: r.get(timeout=10) #超时时间
동기화 방법이 적용됩니다
단순히 파이썬에서 멀티 프로세스에 대해 이야기하는 것과 관련된 더 많은 글은, PHP 중국어 웹사이트를 주목해주세요!