简单谈谈python中的多进程

进程是由系统自己管理的。1:最基本的写法

from multiprocessing import Pooldef f(x):  return x*xif __name__ == '__main__':  p = Pool(5)  print(p.map(f, [1, 2, 3]))[1, 4, 9]

2、实际上是通过os.fork的方法产生进程的unix中,所有进程都是通过fork的方法产生的。

multiprocessing Processosinfo(title):  title  , __name__  (os, ): , os.getppid()  , os.getpid()f(name):  info()  , name__name__ == :  info()  p = Process(=f, =(,))  p.start()  p.join()

3、线程共享内存

threadingrun(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 Processrun(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]

若想共享内存,需使用multiprocessing模块中的Queue

multiprocessing Process, Queuef(q,n):  q.put([n,])__name__ == :  q=Queue()  i ():    p=Process(=f,=(q,i))    p.start()  :    q.get()

4、锁:仅是对于屏幕的共享,因为进程是独立的,所以对于多进程没有用

multiprocessing Process, Lockf(l, i):  l.acquire()  , i  l.release()__name__ == :  lock = Lock()  num ():    Process(=f, =(lock, num)).start()hello world 0hello world 1hello world 2hello world 3hello world 4hello world 5hello world 6hello world 7hello world 8hello world 9

5、进程间内存共享:Value,Array

multiprocessing Process, Value, Arrayf(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, Managerf(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]

#异步:这种写法用的不多

multiprocessing Pooltimef(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) #超时时间

同步的就是apply关于爱情的句子:情不知所起,一往而情深。

简单谈谈python中的多进程

相关文章:

你感兴趣的文章:

标签云: