学python的第六天啦 啦啦 啦啦 啦啦啦

今天是2019.08.21.学习python的第六天,虽然不是太爱学,但是一直还在坚持,能学点是点吧。

进程之间的通信

import multiprocessing

def A(conn):#conn表示管道类型
conn.send([‘a’,‘b’,‘c’,‘d’,‘e’])#要发送的数据
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()
conn_b.send([1,2,3,4,5,6,7])#发送数据给conn_a
print(‘mian’,conn_b.recv())

结果A [1, 2, 3, 4, 5, 6, 7]
mian [‘a’, ‘b’, ‘c’, ‘d’, ‘e’]

类似于聊天机器人的一个对话

import os
import multiprocessing

def M(conn):
while 1:
recv_=conn.recv()
print(‘机器人收到:%s’%recv_)
if recv_“你好”:
conn.send(‘我很好,谢谢’)
elif recv_
“今天天气怎么样”:
conn.send(‘不知道,自己去看天气预报’)
else:
conn.send(‘你是傻逼吧,什么都不知道’)
def p(conn):
y=‘y’
while y !=‘n’:
input_=input(‘人说’)
conn.send(input_)
os.system(‘say %s’%conn.recv())
if name==“main”:
conn_M,conn_p=multiprocessing.Pipe()
p_M=multiprocessing.Process(target=M,args=(conn_M,))
p_M.start()
p(conn_p)

全局变量不可进程共享

import multiprocessing
import os
data =[]
def List():
global data
data.append(1)
data.append(2)
data.append(3)
print(‘p’,os.getpid(),data)
if name==“main”:
p=multiprocessing.Process(target=List,args=())#子进程
p.start()
data.append(‘a’)脚本主进程
data.append(‘b’)
data.append(‘c’)
print(‘main’,os.getpid(),data)

结果main 2220 ['a', 'b', 'c']
       p 11268 [1, 2, 3]

队列可以进程共享

import multiprocessing
import os
queue=multiprocessing.Queue()
def A(q):
print(os.getpid())
q.put([1,2,3,4])#子进程的插入
if name==“main”:
print(os.getpid())
queue.put([‘a’,‘b’])#这里脚本父进程先插入了,子进程就没法再插入了
p=multiprocessing.Process(target=A,args=(queue,))
p.start()
print(queue.get())#脚本父进程取出

结果[‘a’, ‘b’]
注意队列只能单向,要么是父进程插入子进程取出,要么是子进程插入父进程取出

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
if name==“main”:
q=multiprocessing.Queue()
p1=multiprocessing.Process(target=PUT,args=(q,))
p2=multiprocessing.Process(target=GET,args=(q,))
p1.start()
p2.start()

结果
GET 100
GET 100
GET 100
GET 100
GET 100
GET 100
GET 100
GET 100
GET 100
GET 100

队列中已经无法获取元素在五秒之内

进程数据共享

import multiprocessing

def func(num):
num.value=10
if name==“main”:

multiprocessing.Value可以在不同进程之间共享数据

num=multiprocessing.Value('d',1)#double float
print(num.value)#单单num返回的结果Synchronized wrapper for c_double(1.0)
p=multiprocessing.Process(target=func,args=(num,))
p.start()
p.join()
print(num.value)

进程列表数组共享

import multiprocessing

def func(num):
num[2]=9999

if name==“main”:
#不同进程之间实习数组共享
num=multiprocessing.Array(‘i’,[1,2,3,4,5,6]) #i代表int类型
print(num[:])
p=multiprocessing.Process(target=func,args=(num,))
p.start()
p.join()
print(num[:])

进程字典列表共享

import multiprocessing
def func(mydict,mylist):
mydict[“张包子”]=“牛皮”
mydict[“张大炮”]=“大美女”
mylist.append(11)
mylist.append(22)
mylist.append(33)
if name==“main”:
with multiprocessing.Manager() as MG:
mydict=MG.dict()
mylist=MG.list(range(5))
mydict=multiprocessing.Manager().dict()
mylist=multiprocessing.Manager().list(range(5))
p=multiprocessing.Process(target=func,args=(mydict,mylist))
p.start()
p.join()
print(mylist)
print(mydict)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值