python:进程操作
一、多进程应用 multiprocessing <span style="color: #0000ff">def<span style="color: #000000"> talk(conn):
conn.send(b<span style="color: #800000">'<span style="color: #800000">connected<span style="color: #800000">'<span style="color: #000000">) ret = conn.recv(1024<span style="color: #000000">) <span style="color: #0000ff">print<span style="color: #000000">(ret) <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">: =,8080= sk.recv(1024= input(>>
二、进程中的其他方法 multiprocessing (*1015(*10<span style="color: #0000ff">def<span style="color: #000000"> cal_time():
<span style="color: #0000ff">while<span style="color: #000000"> True: time.sleep(1<span style="color: #000000">) <span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">过去了1秒<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 = Process(target=<span style="color: #000000">cal_time) p.daemon = True <span style="color: #008000">#<span style="color: #008000">守护进程:一定在开启进程之前设置 <span style="color: #000000"> p.start() p2 = Process(target=func) <span style="color: #008000">#<span style="color: #008000"> 15s <span style="color: #000000"> p2.start() <span style="color: #0000ff">for i <span style="color: #0000ff">in range(100): <span style="color: #008000">#<span style="color: #008000"> 10s time.sleep(0.1<span style="color: #000000">) <span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000"><span style="color: #800000">'<span style="color: #000000">i) p2.join() 1,start()开启一个进程 join:用join可以让主进程等待子进程结束
守护进程会随着主进程的代码执行结束而结束 正常的子进程没有执行完的时候主进程要一直等着 2)守护进程的作用 会随着主进程的代码执行结束而结束,不会等待其他子进程 3)注意: 守护进程要在start之间设置 守护进程中不能再开启子进程 2,is_alive与terminate multiprocessing (5( == = Process(target=0.11(p.is_alive())
p.is_alive() # 是否活着 True代表进程还在 False代表进程不在了p.terminate() # 结束一个进程,但是这个进程不会立刻被杀死 (5( == = Process(target==
<span style="color: #0000ff">class<span style="color: #000000"> MyProcess(Process):
<span style="color: #0000ff">def<span style="color: #000000"> run(self): <span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">wahaha<span style="color: #800000">'<span style="color: #000000">,self.name,self.pid) time.sleep(5<span style="color: #000000">) <span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">qqxing<span style="color: #800000">'<span style="color: #000000">,self.pid) <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 =<span style="color: #000000"> MyProcess() p.start() <span style="color: #0000ff">print<span style="color: #000000">(p.pid) <span style="color: #008000">#<span style="color: #008000"> pid 查看这个进程 进程id<span style="color: #008000"> <span style="color: #008000"> name 查看这个进程的名字三、锁 multiprocessing Lock
lock = Lock()
lock.acquire()
lock.acquire()
锁 就是在并发编程中 保证数据安全 multiprocessing multiprocessing <span style="color: #0000ff">def<span style="color: #000000"> search(i):
with open(<span style="color: #800000">'<span style="color: #800000">ticket<span style="color: #800000">'<span style="color: #000000">) as f: <span style="color: #0000ff">print(i,json.load(f)[<span style="color: #800000">'<span style="color: #800000">count<span style="color: #800000">'<span style="color: #000000">]) <span style="color: #0000ff">def<span style="color: #000000"> get(i): with open(<span style="color: #800000">'<span style="color: #800000">ticket<span style="color: #800000">'<span style="color: #000000">) as f: ticket_num = json.load(f)[<span style="color: #800000">'<span style="color: #800000">count<span style="color: #800000">'<span style="color: #000000">] time.sleep(random.random()) <span style="color: #0000ff">if ticket_num ><span style="color: #000000"> 0: with open(<span style="color: #800000">'<span style="color: #800000">ticket<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">w<span style="color: #800000">'<span style="color: #000000">) as f: json.dump({<span style="color: #800000">'<span style="color: #800000">count<span style="color: #800000">':ticket_num-1<span style="color: #000000">},f) <span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">%s买到票了<span style="color: #800000">'%<span style="color: #000000">i) <span style="color: #0000ff">else<span style="color: #000000">: <span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">%s没票了<span style="color: #800000">'%<span style="color: #000000">i) <span style="color: #0000ff">def<span style="color: #000000"> task(i,lock): <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">: <span style="color: #0000ff">def<span style="color: #000000"> search(i): 四、信号量 multiprocessing Semaphore
multiprocessing (%1,10(%
== = Semaphore(4 i range(20=sing,sem)).start()
五、事件 事件 —— 异步阻塞事件是所有的进程,都陷入阻塞 multiprocessing Event
multiprocessing multiprocessing 3(
3(
<span style="color: #0000ff">def <span style="color: #000000"> car(i,e):e.wait() <span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">%s车通过<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">: e = Event() <span style="color: #008000">#<span style="color: #008000"> 立一个红灯 tra = Process(target=traffic_light,args=<span style="color: #000000">(e,)) tra.start() <span style="color: #008000">#<span style="color: #008000"> 启动一个进程来控制红绿灯 <span style="color: #0000ff">for i <span style="color: #0000ff">in range(100<span style="color: #000000">): <span style="color: #0000ff">if i%6 ==<span style="color: #000000"> 0 : time.sleep(random.randint(1,3<span style="color: #000000">)) car_pro = Process(target=car,e)) car_pro.start() 六、队列 队列进程之间的通信 1.进程之间通信 可以使用multiprocessing 的 Queue模块2.队列有两种创建方式 第一种不传参数 这个队列就没有长度限制 ;传参数,创建一个有最大长度限制的队列3.提供两个重要方法;put get4.qsize查看队列的大小 producer(q):
i range(100%<span style="color: #0000ff">def consumer(q): <span style="color: #008000">#<span style="color: #008000"> 消费者 <span style="color: #0000ff">for i <span style="color: #0000ff">in range(100<span style="color: #000000">): time.sleep(1<span style="color: #000000">) <span style="color: #0000ff">print<span style="color: #000000">(q.get()) <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">: q = Queue(10) <span style="color: #008000">#<span style="color: #008000"> 托盘 p = Process(target=producer,args=<span style="color: #000000">(q,)) p.start() c1 = Process(target=consumer,)) c2 = Process(target=consumer,)) c1.start() c2.start() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |