您的位置:首页 > 编程语言 > Python开发

Python Day 06

2019-08-21 19:36 99 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/Daisy_0514/article/details/99978285

多进程
1.导入 import multiprocessing
2.创建子进程调用函数
除了创建的子进程和子进程调用函数,其他的都是脚本主进程

#   创建子进程调用函数                函数    args返回元组形式
p = multiprocessing.Process(target=info,args=('hello',))
p.start()#启动进程
p.join()#阻塞进程 等待
print('hello world')

3.多进程
开多进程中:join只为卡主进程,使得多进程执行完毕后在打印输出
4.进程锁
多进程并发执行,也可能乱序并发执行
多进程加锁,挨个执行,但也有可能乱序

lock = multiprocessing.Rlock()#创建锁
p = multiprocessing.Process(target=info,args=(lock,num))

5.进程通信(管道)

import multiprocessing

def A(conn):#conn表示管道类型
while 1:
# conn.send(['a','b','c','d'])
print('A',conn.recv())#收到数据
# conn.close()#关闭
if __name__ == "__main__":
conn_a,conn_b = multiprocessing.Pipe()#创建一个管道含有两个口
p = multiprocessing.Process(target=A,args=(conn_a,))#创建子进程
p.start()
while 1:
input_ = input('>>')
conn_b.send(input_)#发送消息给A
# print('main',conn_b.recv())全局变量进程不可以共享,队列可以进程共享

案例1 类似机器人聊天系统

import multiprocessing
def computer(conn):
recv_ = conn.recv()
print('电脑收到:%s'%recv_)
if recv_ == "你好":
conn.send('好')
def person(conn):
input_ = input('人说:')
conn.send(input_)

if __name__ == "__main__":
conn_computer,conn_person = multiprocessing.Pipe()#创建管道
p_computer = multiprocessing.Process(target=computer,args=(conn_computer,))#创建子进程
p_computer.start()
person(conn_person)

6.全局变量不可以进程共享
7.队列
队列可以进程共享

作用
put(item, block=True, timeout=None) 将item放入队列 block 有 flase and true timeout 为阻塞时间
get(block=True, timeout=None) 将从队列移除并返回一个项目
qsize() 返回队列的大致大小,qsize() > 0 不保证后续的 get() 不被阻塞,qsize() < maxsize 也不保证 put() 不被阻塞
empty() 如果队列为空,返回 True ,否则返回 False 。
full() 如果队列是满的返回 True ,否则返回 False
join() 阻塞至队列中所有的元素都被接收和处理完毕。
task_done() 表示前面排队的任务已经被完成。被队列的消费者线程使用。每个 get() 被用于获取一个任务, 后续调用 task_done() 告诉队列,该任务的处理已经完成,多次调用可能会引发异常
import multiprocessing
import time
def PUT(q):
for i in range(10):
time.sleep(1)
q.put(100)
def GET(q):
while 1:
try:
print('GET',q.get(timeout = 5))
except:
print('队列已经在五秒之内无法获取元素')
break
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: