# # 进程间通信IPC# # 管道# from multiprocessing import Process, Pipe# # 默认双向# # False时为只读(只收) 只写(只发)# fd, fw = Pipe(duplex=True)# def zijinc():# print('进程被调用')# fw.send('我是紫禁城')# def fujinc():# data = fd.recv()# print(data)# print('父进程被调用')# p = Process(target=zijinc)# p.start()# fujinc()# p.join()# 消息队列# from multiprocessing import Queue,Process# # Queue(maxsize=0)表示最多能存多少信息# q=Queue(1)# def zjinc():# data='子进程的数据'# print('子进程被调用')# q.put(data)#put(data,[block,timeout])block默认阻塞 timeout超时事件# def fujinc():# print('父进程被调用')# q.get()# p=Process(target=zjinc)# p.start()# print(q.full())#是否已经满# print(q.empty())#是否为空# print(q.qsize())#消息数量# fujinc()# q.close()#关闭队列消息# p.join()# 共享内存# from multiprocessing import Value,Process# v=Value('i',123)#i代表数据类型123代表值可使用value获取# def zjinc():# print('子进程被调用')# print(v.value)# def fujinc():# print('父进程被调用')# v.value+=100# p=Process(target=zjinc)# p.start()# fujinc()# p.join()# 共享内存组# from multiprocessing import Process,Array# a=Array('c',b'ajhgjhajg')#后面的可迭代对象必须是一样数据类型且字符必须是二进制字节但是却支持字节串赋值# def zjinc():# print('子进程被调用')# for i in a:# print(i)# print(a.value)# def fujinc():# print('父进程被调用')# a[0]=b'I'# print(a.value)# p=Process(target=zjinc)# p.start()# p.join()# fujinc()# 进程间通信之信号# from multiprocessing import Process# import os# from signal import *# # os.kill(pid,sig)# # signal.alarm(3)所有信号的生命周期时自本身语句开始直到程序结束,区别于其他的python语句# # signal.signal(signum,handler)# def ex(sig,frame):# print('待处理')# if sig ==SIGALRM:# print('收到定时炸弹')# os.kill(p.pid,SIGUSR1)# def EXIT1(sig,frame):# if sig==SIGUSR1:# print('子进程已经退出可以收尸')# os._exit(0)# def zjinc():# print('子进程被调用')# signal(SIGUSR1,EXIT1)# print('接到信号')# while True:# pass# def fujinc():# print('父进程被调用')# alarm(5)# p=Process(target=zjinc)# p.start()# fujinc()# signal(SIGALRM,ex)# p.join()# 信号量# from multiprocessing import Process,Semaphore# import os# def zijinc():# print('子进程被调用')# s.acquire()# print(s.get_value())# s.release()# print(s.get_value())# def fujinc():# print('父进程被调用')# s=Semaphore(3)# l=[]# for i in range(3):# p=Process(target=zijinc)# l.append(p)# p.start()# fujinc()# for i in l:# p.join()# 同步互斥# from multiprocessing import Process,Event# e=Event()# def zjinc():# print('子进程被调用')# e.set()# print('子进程完成可以执行父进程')# def fujinc():# print('等待子进程完成再执行')# e.wait()# print('父进程被调用')# p=Process(target=zjinc)# p.start()# print(e.is_set())# fujinc()# p.join()# 锁# from multiprocessing import Process,Lock# l=Lock()# def zjinc():# l.acquire()# print('子进程被调用')# l.release()# def fujinc():# l.acquire()# print('父进程被调用')# l.release()# p=Process(target=zjinc)# p1=Process(target=fujinc)# p.start()# p1.start()# p.join()# p1.join()