进程multiprocessing.Process
"""
# multiprocessing创建子进程。
新的进程是原有进程的子进程,子进程复制父进程全部的内存空间代码段,有个进程可以创建多个子进程。
子进程只执行指定的函数,其余内容均是父进程执行内容,但是子进程也拥有其他父进程资源。
各个进程在执行上互不影响,也没有先后顺序关系。
进程创建后,各个进程空间度独立,相互没有影响。
multiprocessing创建的子进程无法使用标准输出(input)
"""
import multiprocessing
import time
def fun(count):
for _ in range(count):
print("开始执行进程函数。。。。。。")
print(time.time())
time.sleep(2)
print("进程执行结束")
if __name__ == '__main__':
p_list = []
for _ in range(5):
p = multiprocessing.Process(target=fun, args=(1,))
p_list.append(p)
print(p.name)
for i in p_list:
i.start()
print(i.pid)
for j in p_list:
j.join()
进程池multiprocessing.Pool
"""
"""
from multiprocessing import *
import time
def fun(count):
for _ in range(count):
print(f"开始执行进程函数{time.ctime()}。。。。。。{count}")
time.sleep(2)
if __name__ == '__main__':
count = 1
pool = Pool()
for i in range(10):
msg = "Tedu-%d" % i
pool.apply_async(func=fun, args=(count,))
pool.close()
pool.join()
创建进程类
"""
创建进程类
"""
from multiprocessing import Process
class MyProcess(Process):
def __init__(self, values, count):
self.values = values
self.count = count
super().__init__()
def fun1(self):
print("步骤1:假设很复杂", self.values)
def fun2(self):
print("步骤2:假设也很复杂", self.values)
def run(self):
for _ in range(self.count):
self.fun1()
self.fun2()
if __name__ == '__main__':
process = MyProcess(1, 5)
process.start()
process.join()
图片切割练习题
"""
将一个文件拆分为两个部分,每个部分分别是文件的一般,即源文件的上下半部分,分别拆到一个新文件里
要求使用两个进程同时进行
提示:按照文件字节数计算文件大小
os.path.getsize()
"""
import os
import multiprocessing
size = os.path.getsize("google.jpg")
def top():
"""
如果是大文件写入文件尽量分开读取及写入,如果不分开写的话,对大文件来说很不友好
:return:
"""
rb = open("google.jpg", "rb")
wb = open("google1.jpg", "wb")
top_size = size // 2
while top_size >= 1024:
wb.write(rb.read(1024))
top_size -= 1024
else:
wb.write((rb.read(top_size)))
rb.close()
wb.close()
def bot():
rb = open("google.jpg", "rb")
wb = open("google2.jpg", "wb")
rb.seek(size // 2, 0)
while True:
data = rb.read(1024)
if not data:
break
wb.write(data)
rb.close()
wb.close()
if __name__ == '__main__':
p = multiprocessing.Process(target=top)
p.start()
bot()
p.join()
进程通讯消息队列multiprocessing.Queue
"""
"""
from multiprocessing import *
q = Queue()
def request():
name = "zhouzongxin"
password = "123456"
q.put(name)
q.put(password)
def handle():
name = q.get()
password = q.get()
print(f"账号:{name},密码:{password}")
if __name__ == '__main__':
p1 = Process(target=request)
p2 = Process(target=handle)
p1.start()
p2.start()
p1.join()
p2.join()