口说不如身逢,耳闻不如目见。
嘴上说不如亲身做,耳听为虚,一定要亲眼看到。
1 进程调度
2 僵尸进程与孤儿进程
3 进程对象及其他方法
4 守护进程
from multiprocessing import Process,current_process
import time
import os
def task():
print(os.getpid())
print('子进程')
time.sleep(200)
print('子进程结束')
if __name__ == '__main__':
t = Process(target=task, )
t.start()
time.sleep(1)
print('主进程结束')
5 互斥锁
from multiprocessing import Process, Lock
import json
import time
import random
def search():
with open('ticket', 'r', encoding='utf-8') as f:
dic = json.load(f)
print('余票还有:', dic.get('ticket_count'))
def buy():
with open('ticket', 'r', encoding='utf-8') as f:
dic = json.load(f)
time.sleep(random.randint(1, 3))
if dic.get('ticket_count') > 0:
dic['ticket_count'] -= 1
with open('ticket', 'w', encoding='utf-8') as f:
json.dump(dic, f)
print('买票成功')
else:
print('买票失败')
def task(mutex):
search()
with mutex:
buy()
if __name__ == '__main__':
mutex = Lock()
for i in range(10):
t = Process(target=task, args=(mutex,))
t.start()
6 队列介绍
from multiprocessing import Queue
q=Queue(5)
q.put(1)
q.put('lqz')
q.put(18)
q.put(19)
print(q.empty())
print(q.full())
'''
q=Queue(队列大小)
# 放值
q.put(asdf)
q.put_nowait(asdf) # 队列满了,放不进去就不放了,报错
# 取值
q.get() # 从队列头部取出一个值
q.get_nowait() # 从队列头部取值,没有就抛错
# 队列是否为空,是否满
print(q.empty()) # 看一下队列是不是空的
print(q.full()) # 看一下队列是不是满的
'''
3.7 IPC机制(进程间通信)
from multiprocessing import Process, current_process, Queue
import time
import os
def task1(q):
print('我是task1进程,我的id号是:%s'%os.getpid())
q.put('lqz is handsome')
def task2(q):
print('我是task2进程,我的id号是:%s'%os.getpid())
if __name__ == '__main__':
q = Queue(5)
t1 = Process(target=task1, args=(q,))
t1.start()
t2 = Process(target=task2, args=(q,))
t2.start()
print(q.get())