Python 笔记之进程通信

复制代码
'''
当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态生成多个进程
但是如果是上百个或者上千个目标,手动去创建进程的工作量很大,此时就可以利用到Multiprocessing模块提供的Pool方法
初始化pool时,可以指定一个最大进程数,当有新的请求提交到Pool中时,如果池还没有满
那么就会创建一个新的进程来执行该请求;但是如果池中的进程数量已经达到指定的最大值,那么该请求会等待
直到池中有进程结束,才会创建新的进程来执行
阻塞式:添加一个执行一个,如果一个任务不结束宁外一个任务就进不来
非阻塞式:全部添加到队列中,立刻返回,并没有等待其它进程执行完毕,但是回调函数是等地啊任务完成之后才调用。
好处:设置进程数量,达到进程的复用
'''
'''
pool=Pool(max) 创建进程池对象
pool.apply()阻塞的
pool.apply_async()非阻塞的
pool.close()停止添加进程
pool.join()#让主进程让步
queue 进程通信
'''
复制代码
import os
from multiprocessing import Pool
#非阻塞式进程
import time
from random import random
from multiprocessing import Queue

q=Queue(6)
q.put('A')
q.put('B')
q.put('C')
q.put('D')
# q.put('E')

print(q.qsize())
if not q.full():
    q.put('F',timeout=3)#put() 如果queue满了则只能等待,除非有空地则添加成功
else:
    print('队列已满')
print('++++++++++')
print(q.get())
print(q.get())
print('++++++++++')
# print(q.get())
# print(q.get())
# print(q.get())
# print(q.get(timeout=2))

print(q.put_nowait("E"))
print('++++++++++')
print(q.get_nowait())
print('---')

#进程通信
from multiprocessing import Process,Queue
import time

def download(q):
    images=['girl.jpg','boy.jpg','man.jpg']
    for image in images:
        print("正在下载:%s"%image)
        time.sleep(1)
        q.put(image)


def getfile(q):
    while True:
        try:
            file=q.get(timeout=5)
            print(f'{file}保存成功')
        except:
            print("全部保存成功")
            break

if __name__=='__main__':
    q = Queue(5)
    p1=Process(target=download,args=(q,))
    p2=Process(target=getfile,args=(q,))
    p1.start()

    p2.start()

    p2.join()
    p1.join()
复制代码
#进程,线程
#Process类
#def func(n):
#    pass
#创建进程:p=Process(target=func,name='',args=(1,),kwargs='')
#启动p.start()
#run()
from multiprocessing import Process
class MyProcess(Process):
    def run(self):
        pass

p=MyProcess()
p.start()
#进程的数据共享
n=0
#进程池:Pool
from multiprocessing import pool
p=pool(5)
#阻塞式 apply(func,args,kwargs)
#非阻塞式 apply_async(fun,args,kwargs,callback=函数)
# 进程间的通信 queue
from multiprocessing import Queue
q=Queue(4)
q.put()
q.get()
q.qsize()
q.empty()
q.full()
#线程关系
# 包含关系
#进程里面可以存着多个线程,多个线程可以共用进程资源
from threading import Thread
t=Thread(target=func,name='',args=(1,),kwargs='')
t.start()
相关推荐
power 雀儿5 分钟前
集群聊天服务器---MySQL数据库的建立
服务器·数据库·mysql
ldj20205 分钟前
2025 Centos 安装PostgreSQL
linux·postgresql·centos
翻滚吧键盘12 分钟前
opensuse tumbleweed上安装显卡驱动
linux
近津薪荼15 分钟前
初学者关于数据在内存中的储存的笔记
笔记
cui_win1 小时前
【内存】Linux 内核优化实战 - net.ipv4.tcp_tw_reuse
linux·网络·tcp/ip
碎叶城李白2 小时前
若依学习笔记1-validated
java·笔记·学习·validated
BD_Marathon3 小时前
Ubuntu:Mysql服务器
服务器·mysql·ubuntu
HuashuiMu花水木4 小时前
PyTorch笔记1----------Tensor(张量):基本概念、创建、属性、算数运算
人工智能·pytorch·笔记
CodeWithMe4 小时前
【Note】《深入理解Linux内核》 Chapter 15 :深入理解 Linux 页缓存
linux·spring·缓存
0wioiw04 小时前
Ubuntu基础(监控重启和查找程序)
linux·服务器·ubuntu