加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python:进程操作

发布时间:2020-12-17 00:01:12 所属栏目: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") r

一、多进程应用

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">:
sk =<span style="color: #000000"> socket.socket()
sk.bind((<span style="color: #800000">'<span style="color: #800000">127.0.0.1<span style="color: #800000">',8080<span style="color: #000000">))
sk.listen()
<span style="color: #0000ff">while<span style="color: #000000"> True:
conn,addr =<span style="color: #000000"> sk.accept()
p = Process(target=talk,args=<span style="color: #000000">(conn,))
p.start()
conn.close()
sk.close()

=,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):
search(i) <span style="color: #008000">#<span style="color: #008000"> 查看票
<span style="color: #000000"> lock.acquire()
get(i) <span style="color: #008000">#<span style="color: #008000"> 抢票
<span style="color: #000000"> lock.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">:
lock =<span style="color: #000000"> Lock()
<span style="color: #0000ff">for i <span style="color: #0000ff">in range(20): <span style="color: #008000">#<span style="color: #008000"> 20个人同时抢票
p = Process(target=task,args=<span style="color: #000000">(i,lock))
p.start()
<span style="color: #0000ff">import<span style="color: #000000"> json
<span style="color: #0000ff">import<span style="color: #000000"> time
<span style="color: #0000ff">import<span style="color: #000000"> random
<span style="color: #0000ff">from multiprocessing <span style="color: #0000ff">import<span style="color: #000000"> Lock
<span style="color: #0000ff">from multiprocessing <span style="color: #0000ff">import<span style="color: #000000"> Process

<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,lock))
p.start()

四、信号量

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()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读