Python网络编程(进程池、进程间的通信)
import os
from multiprocessing import Process
from time import sleep
#获取文件的大小
size = os.path.getsize("./timg.jpeg") # 获取文件的字节数
# f = open("timg.jpeg",'rb')
#复制前半部分
def copy1(img):
f = open(img,'rb') # 二进制读取要复制的文件
n = size // 2
fw = open('1.jpeg','wb') # 二进制创建文件
while True:
if n < 1024: # 判断文件大小是否大于1024字节 如果小于则直接读取写入
data = f.read(n)
fw.write(data)
break
data = f.read(1024) # 否则每次循环读取1024字节并写入
fw.write(data)
n -= 1024
f.close()
fw.close()
#复制后半部分
def copy2(img):
f = open(img,'rb') # 读取文件必须要每次读取 如果在父进程中打开文件流对像
# 子进程会通同时调用一个文件流对像 由于文件流对象特性会记录游标
# 如若先执行后半部复制这前半部会导致读取不到数据
fw = open('2.jpeg','wb')
f.seek(size // 2,0)
while True:
data = f.read(1024)
if not data:
break
fw.write(data)
fw.close()
f.close()
p1 = Process(target = copy1,args = ('timg.jpeg',)) # 创建子进程并让子进程分别同时复制
p2 = Process(target = copy2,args = ('timg.jpeg',))
p1.start()
p2.start()
p1.join()
p2.join()
from multiprocessing import Process
import time
class ClockProcess(Process):
def __init__(self,value):
#调用父类init
super().__init__()
self.value = value
#重写run方法
def run(self):
for i in range(5):
time.sleep(self.value)
print("The time is {}".format(time.ctime()))
p = ClockProcess(2)
#自动执行run
p.start()
p.join()
from multiprocessing import Pool
from time import sleep,ctime
def worker(msg):
sleep(2)
print(msg)
return ctime()
#创建进程池对象
pool = Pool(processes = 4)
result = []
for i in range(10):
msg = "hello %d"%i
#将事件放入进程池
r = pool.apply_async(func = worker,args = (msg,))
result.append(r)
#同步执行
# pool.apply(func = worker,args = (msg,))
#关闭进程池
pool.close()
#回收
pool.join()
#获取事件函数返回值
for i in result:
print(i.get())
from multiprocessing import Pool
import time
def fun(n):
time.sleep(1)
print("执行 pool map事件",n)
return n ** 2
pool = Pool(4)
#在进程池放入6个事件
r = pool.map(fun,range(6)) # map高阶函数 fun和iter执行6次
print("返回值列表:",r)
pool.close()
pool.join()
from multiprocessing import Process,Value
import time
import random
#创建共享内存
money = Value('i',6000)
#存钱
def deposite():
for i in range(100):
time.sleep(0.05)
#对value的修改就是对共享内存的修改
money.value += random.randint(1,200)
#花销
def withdraw():
for i in range(100):
time.sleep(0.04)
#对value的修改就是对共享内存的修改
money.value -= random.randint(1,200)
d = Process(target = deposite)
w = Process(target = withdraw)
d.start()
w.start()
d.join()
w.join()
print(money.value)
from multiprocessing import Process,Array
import time
#创建共享内存
shm = Array('c',b"hello") #字符类型要求是bytes
#开辟5个整形单元的共享内存空间
# shm = Array('i',5)
def fun():
for i in shm:
print(i)
shm[0] = b"H"
p = Process(target = fun)
p.start()
p.join()
print(shm.value) #从首地址打印字符串
# for i in shm:
# print(i)
关注公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Nginx安全优化
1、隐藏nginx版本号 http{ ... server_tokens off; ... } 2、禁止访问指定目录下的程序和文件 location ~ ^/images/.*\.(php|php5|.sh|.pl|.py)$ { deny all; } location ~ ^/(static|js) { deny all; } location /admin/ { return 404; } 3、
-
下一篇
Java注释
单行注释:代码介绍,让代码变得明了 // 也可以注释 让一些代码不运行 编译的class文件中是不含注释的 多行注释 /* 多行注释 注释内容 */ 文档注释:API文档(就是功能介绍)告诉这个文档的作用。文档注释可以生成今后的使用功能说明书。 Java中的API文档就是他的JDK代码的功能说明文档。 注释有固定的书写位置:类上可以写 属性上也可以写 方法上也可以写 代码中也可以写(但是不推荐) java doc文档生成命令。 文档注释的好处 扩展知识 电脑说的所有东西都是由0 和1 组成的 光盘啊 磁碟啊 等等中的存储都是由二进制组成的 显示的过程是一个读取和分析的过程。 照片是由像素组成的 一个像素格子就一个颜色 像素越照片越清晰。照片就是由二进制组成的数字 在有固定的解码器进行分析 每个像素点是什么颜色,再有像素点组成照片。 计算机中所有肉眼可见的东西都是由 二进制 有特定的工据转换分析后 组成肉眼可见的东西、 人面识别 只是将你脸金三角进行分析 组成二进制数据 在哪你的脸和你的照片进行分析 只要80%以上就是本人。
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- Docker容器配置,解决镜像无法拉取问题
- Red5直播服务器,属于Java语言的直播服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- 设置Eclipse缩进为4个空格,增强代码规范
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Linux系统CentOS6、CentOS7手动修改IP地址
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2整合Redis,开启缓存,提高访问速度

微信收款码
支付宝收款码