营销型网站建设哪家便宜,网站换空间 怎么下载,wordpress功能 更改,google竞价推广当多线程创建完毕之后#xff0c;start并没有了立刻运行#xff0c;依旧需要和其他线程抢CPU的资格#xff0c;只是时间很短。进程之间的通信分为两种#xff0c;queue和pipe 1 import multiprocessing2 def foo(q):3 q.put([1,hello,True])4 if __name____main__:5 …当多线程创建完毕之后start并没有了立刻运行依旧需要和其他线程抢CPU的资格只是时间很短。进程之间的通信分为两种queue和pipe 1 import multiprocessing2 def foo(q):3 q.put([1,hello,True])4 if __name____main__:5 qmultiprocessing.Queue()#通过multiprocessing建立一个队列6 pmultiprocessing.Process(targetfoo,args(q,))7 #用multiprocessing在调用Process,建立一个子进程定义函数名将q作为参数传到foo函数8 #foo函数就可以通过这个参数来与主进程做交互了。9 p.start()#激活这个子进程
10 print(q.get())#主进程 上面函数通过multiprocessing的queue来实现进程间通信。 1 from multiprocessing import Pipe,Process2 def foo(sk):3 sk.send(hello world)#通过管道sk发送内容4 print(sk.recv())#打印接收到的内容5 if __name__ __main__:6 sock,connPipe()#定义一个管道的两头7 pProcess(targetfoo,args(sock,))#由于上面已经通过multiprocessing导入了Process8 # 所以这里直接就可以创建一个子进程并将sock(管道的一头)作为参数给foo函数9 p.start()#激活这个进程
10 print(conn.recv())#打印接收到的内容conn是管道的另一头
11 conn.send(hi son)#通过管道发送内容 上面代码通过Pipe来实现两个进程间的通信。 1 from multiprocessing import Manager,Process2 def foo(l,i):#收到参数l是Mlist,i是循环的i3 l.append(i*i)#将i平方添加到Mlist4 if __name____main__:5 managerManager()6 Mlistmanager.list([11,22,33])#定义一个列表7 8 l[]9 for i in range(5):#创建5个子进程
10 pProcess(targetfoo,args(Mlist,i))#定义一个进程将Mlist和i作为参数传到foo
11 p.start()#激活这个进程执行foo函数
12 l.append(p)#将5个进程添加到l这个列表
13 for i in l:
14 i.join()#循环这个列表然后将每个进程join
15 print(Mlist)#当所有的子进程都结束运行主进程 上面代码通过Manger实现子进程间的通信。 协程协程又叫微线程实际上就是单线程通过python语法或模块来实现并发。本质上就是一个进程一个线程。 上图是用yield实现了一个两个函数逇并发处理。 1 from greenlet import greenlet#导入这个模块2 def foo():#定义一个函数3 print(ok1)#打印4 gr2.switch()#将程序切换到下面一个函数按照名字切5 print(ok3)#打印6 gr2.switch()#将程序切换到下面一个函数按照名字切7 def bar():8 print(ok2)#打印9 gr1.switch()#切到上面foo函数
10 print(ok4)
11 gr1greenlet(foo)#实例化这个函数
12 gr2greenlet(bar)
13 gr1.switch()#在外面写这个就执行了这个函数 通过greenlet模块的switch来实现协程的切换greenlet模块需要手动去pycharm下载 1 import gevent#导入这个模块2 def foo():3 print(running in foo)4 gevent.sleep(2)#打印之后睡一秒模拟io操作5 print(switch to foo again)6 def bar():7 print(switch to bar)8 gevent.sleep(1)#打印之后睡一秒模拟io操作9 print(switch to bar again)
10 gevent.joinall([gevent.spawn(foo),gevent.spawn(bar)])
11
12 这个程序的运行过程是先执行foo函数
13 打印之后遇到了IO操作然后自动切换到下一个函数执行
14 打印之后又遇到了IO操作然后切回foo函数发现IO2秒还没有结束
15 然后又切到了bar函数发现IO结束打印再切回foo函数打印
16 上面代码通过gevent模块来实现写成的IO期间自动切换实现并发的程序。gevent需要从pycharm下载。 转载于:https://www.cnblogs.com/ArmoredTitan/p/7212171.html