进程:
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 import multiprocessing,threading,time 5 6 def run(name): 7 t=threading.Thread(target=run2)#创建新线程 8 t.start() 9 print('进程[%s],打印中...'%name) 10 time.sleep(1) 11 12 def run2(): 13 print(threading.get_ident())#打印线程ID 14 time.sleep(2) 15 16 17 if __name__ == '__main__': 18 for i in range(10): 19 p=multiprocessing.Process(target=run,args=('第[%s]个进程'%i,))#创建新进程 20 p.start()
进程号:
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 5 import multiprocessing,threading,time,os 6 from multiprocessing import Process#从 multprocessing 打开 Process 7 def info_l(file): 8 print('当前模块名:',__name__) 9 print('父进程ID:',os.getppid()) 10 print('进程ID:',os.getpid()) 11 print(' ') 12 13 def f(name): 14 print('查看:',name) 15 info_l('相关列表') 16 17 18 if __name__ == '__main__': 19 info_l('主进程相关列表') 20 p=Process(target=f,args=('当前进程',)) 21 p.start() 22 p.join()
进程锁:
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 5 from multiprocessing import Process,Lock # Lock 进程锁通讯中间件 6 7 def f(lock,i): 8 lock.acquire()#进程锁 9 print('第[%s]个进程'%i) 10 lock.release()#解锁 11 if __name__ =='__main__': 12 lock=Lock()#进程锁对象 13 for i in range(10): 14 p=Process(target=f,args=(lock,i)).start()
进程之间通讯:
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 5 import multiprocessing,queue,threading 6 from multiprocessing import Process,Queue # Queue 进程通讯中间件 7 8 9 ''' 线程 之间共享队列 10 def f(): 11 q.put([1,None,'加入数据'])#队列 12 if __name__ =='__main__': 13 q=queue.Queue()#线程队列 14 #q=Queue()#进程队列 15 p=threading.Thread(target=f,)#创建线程 16 p.start() 17 print(q.get())#输出,取出的 18 p.join() 19 ''' 20 def f(q):#存入q对象 21 q.put([1,None,'加入数据'])#队列 22 if __name__ =='__main__': 23 q=Queue()#进程队列 24 p=Process(target=f,args=(q,))#创建进程 25 p.start() 26 print(q.get())#输出,取出的 27 p.join()
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 import os 5 from multiprocessing import Process,Pipe,Manager # Pipe 管道 进程通讯中间件 6 7 8 def f(d,l): 9 d[os.getpid()]=os.getpid()#修改字典 10 l.append(os.getpid())#添加列表内容 11 print(d) 12 print(l) 13 14 15 if __name__ =='__main__': 16 with Manager() as manager: 17 d=manager.dict()#创建一个进程之间可修改的字典 18 l=manager.list(range(5))#创建一个进程之间可修改的列表 19 p_list=[]#join使用 20 for i in range(10): 21 p=Process(target=f,args=(d,l))#创建进程传入数据, 22 p.start() 23 p_list.append(p) 24 for r in p_list:#等待进程完成 25 r.join() 26 print(d) 27 print(l)
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 5 from multiprocessing import Process,Pipe # Pipe 管道 进程通讯中间件 6 7 def f(conn):#存入conn对象 8 conn.send(['子进程发送信息','....']) 9 print('收到父进程的信息:',conn.recv()) 10 conn.close() 11 if __name__ =='__main__': 12 parent_conn,child_conn=Pipe()#生成一个管道,返回两个值,管理双端 13 p=Process(target=f,args=(child_conn,))#创建进程 14 p.start() 15 print('收到子进程的信息:',parent_conn.recv()) 16 parent_conn.send(['父进程发送信息']) 17 p.join()
进程池:
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 #__author__=2017/6/23 5 import time,os 6 from multiprocessing import Process,Lock,Pool # Pool 进程池通讯中间件 7 8 def Foo(i): 9 print('第[%s]个进程,ID:'%i,os.getpid()) 10 time.sleep(3) 11 return i+100 12 def Bar(arg): 13 print('回调>>>>:',arg,os.getpid()) 14 if __name__ =='__main__': 15 #pool=Pool(processes=5)#定义一个进程池 表示允许进程池同时放入5个进程 16 pool=Pool(5)#定义一个进程池 表示允许进程池同时放入5个进程 17 for i in range(10): 18 #pool.apply(func=Foo,args=(i,))#使用进程池创建进程 串行 19 #pool.apply_async(func=Foo,args=(i,))#使用进程池创建进程 并行 20 pool.apply_async(func=Foo,args=(i,),callback=Bar)#回调 21 22 print('结束') 23 #pool.join() 24 pool.close()#一定要先关闭进程池 25 pool.join()#后进行join
协程:
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 #python 5 #2017/6/24 10:10 6 #__author__='Administrator' 7 8 import time 9 import queue 10 def consumer(name):#消费者函数 11 print('[%s]消费产品中.......'%name) 12 while True: 13 new_b=yield #跳转点 14 print('[%s] 消费 [%s]'%(name,new_b)) 15 def producer():#生产者函数 16 r=con.__next__() 17 r2=con2.__next__() 18 n=0 19 while n<10: 20 n+=1 21 con.send(n)#发送给消费者 22 con2.send(n) 23 print('