python基础学习21----进程
python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程。 进程与线程的使用有很多相似之处,有关线程方面的知识请参考 multiprocessing模块 1.进程的创建 <span style="color: #0000ff;">def<span style="color: #000000;"> func(msg):
<span style="color: #0000ff;">print<span style="color: #000000;">(msg) <span style="color: #0000ff;">print(<span style="color: #800000;">"<span style="color: #800000;">这是一个进程<span style="color: #800000;">"<span style="color: #000000;">) <span style="color: #0000ff;">if <span style="color: #800080;">name==<span style="color: #800000;">"<span style="color: #800000;">main<span style="color: #800000;">"<span style="color: #000000;">: p=multiprocessing.Process(target=func,args=(<span style="color: #800000;">"<span style="color: #800000;">hello world<span style="color: #800000;">"<span style="color: #000000;">,)) p.start() ? 以继承类的方式创建进程 ==
</span><span style="color: #0000ff;">def</span><span style="color: #000000;"> run(self):
</span><span style="color: #008000;">#</span><span style="color: #008000;">这里是将threading.Thread中的run方法进行了重载</span>
<span style="color: #0000ff;">print</span>(<span style="color: #800000;">"</span><span style="color: #800000;">%s is %d</span><span style="color: #800000;">"</span>%<span style="color: #000000;">(self.name,self.age))
<span style="color: #0000ff;">if <span style="color: #800080;">name==<span style="color: #800000;">"<span style="color: #800000;">main<span style="color: #800000;">"<span style="color: #000000;">:t=Myprocessing(<span style="color: #800000;">"<span style="color: #800000;">sfencs<span style="color: #800000;">",19<span style="color: #000000;">) t.start() 2.进程的并行 ===
</span><span style="color: #0000ff;">def</span><span style="color: #000000;"> run(self):
</span><span style="color: #0000ff;">print</span><span style="color: #000000;">(self.name)
time.sleep(self.second)
</span><span style="color: #0000ff;">print</span><span style="color: #000000;">(self.age)
<span style="color: #0000ff;">if <span style="color: #800080;">name==<span style="color: #800000;">"<span style="color: #800000;">main<span style="color: #800000;">"<span style="color: #000000;">:time_begin=<span style="color: #000000;">time.time()
<span style="color: #800000;">'''<span style="color: #800000;">Tom 19 25 5.198107481002808 <span style="color: #800000;">''' join的用法和线程相同 3.守护进程 守护进程与守护线程的原理相同,只不过设置守护进程的方式为p.daemon=True 4.lock lock的作用同多线程,实现方式有两种 <span style="color: #0000ff;">def<span style="color: #000000;"> func2(lock,f):
with lock: fs=open(f,<span style="color: #800000;">'<span style="color: #800000;">a+<span style="color: #800000;">'<span style="color: #000000;">)
<span style="color: #0000ff;">def<span style="color: #000000;"> func1(lock,f):
<span style="color: #0000ff;">if <span style="color: #800080;">name==<span style="color: #800000;">"<span style="color: #800000;">main<span style="color: #800000;">"<span style="color: #000000;">: 与线程不同的是,这里lock是以参数方式传递,因为不同的进程并不能共享资源 5.Semaphore 用来控制对共享资源的最大访问数量 <span style="color: #0000ff;">def<span style="color: #000000;"> func(s,i):
s.acquire() <span style="color: #0000ff;">print(multiprocessing.current_process().name + <span style="color: #800000;">"<span style="color: #800000;">acquire<span style="color: #800000;">"<span style="color: #000000;">); time.sleep(2<span style="color: #000000;">) <span style="color: #0000ff;">print(multiprocessing.current_process().name + <span style="color: #800000;">"<span style="color: #800000;">releasen<span style="color: #800000;">"<span style="color: #000000;">); s.release() <span style="color: #0000ff;">if <span style="color: #800080;">name == <span style="color: #800000;">"<span style="color: #800000;">main<span style="color: #800000;">"<span style="color: #000000;">: 6.event与线程用法相同 7.队列 有一个专门属于多进程的队列multiprocessing.Queue <span style="color: #0000ff;">def<span style="color: #000000;"> writer(q):
q.put(<span style="color: #800000;">"<span style="color: #800000;">hello world<span style="color: #800000;">"<span style="color: #000000;">) <span style="color: #0000ff;">def<span style="color: #000000;"> reader(q): <span style="color: #0000ff;">if <span style="color: #800080;">name == <span style="color: #800000;">"<span style="color: #800000;">main<span style="color: #800000;">"<span style="color: #000000;">: 8.管道pipe Pipe方法返回(conn1,conn2)代表一个管道的两个端。Pipe方法有duplex参数,如果duplex参数为True(默认值),那么这个管道是全双工模式,也就是说conn1和conn2均可收发。duplex为False,conn1只负责接受消息,conn2只负责发送消息。 <span style="color: #0000ff;">def<span style="color: #000000;"> sender(p):
p.send(<span style="color: #800000;">"<span style="color: #800000;">hello world<span style="color: #800000;">"<span style="color: #000000;">) <span style="color: #0000ff;">def<span style="color: #000000;"> receiver(p): <span style="color: #0000ff;">if <span style="color: #800080;">name == <span style="color: #800000;">"<span style="color: #800000;">main<span style="color: #800000;">"<span style="color: #000000;">: 9.manager manager实现进程之间数据共享 <span style="color: #0000ff;">def<span style="color: #000000;"> func(list1,d,i):
list1[i]=<span style="color: #000000;">i d[<span style="color: #800000;">"<span style="color: #800000;">a<span style="color: #800000;">"]=<span style="color: #000000;">i <span style="color: #0000ff;">if <span style="color: #800080;">name == <span style="color: #800000;">"<span style="color: #800000;">main<span style="color: #800000;">"<span style="color: #000000;">: 未完 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |