python 进程

1、创建进程

方法1:使用fork()

import os
pid = os.fork()
if pid ==0: # 子进程
    print("child")
else:  # 父进程
    print("parent")

方法2:使用multiprocessing.Process

from multiprocessing import Process
import os

def run_proc(args):
    print("子进程运行中,args = %s,pid = %d " %(args,os.getpid()))

if __name__=='__main__':
    print("父进程运行中,pid = %d " % (os.getpid()))
    p = Process(target=run_proc,args = ('Test',))
    # p.is_alive()   # 判断进程是否正在存活
    # p.terminate()  # 不管任务是否完成,直接终止
    print("--- 子进程开始执行 ---")
    p.start()
    p.join()  # 使主进程等待子进程执行完后才退出
    print("--- 子进程结束执行 ---")

方法3:继承multiprocessing.Process类

from multiprocessing import Process

class MyProcess(Process):
    def run(self):  # 重写了run()方法
        print("---子类---")
        
if __name__=='__main__':
   p = MyProcess()
   p.start()  # start调用了run()方法
   p.join()

2、进程池

先创建好很多进程,将这些进程放入进程池中,当进程被使用时再分配。而不是在使用时在创建。

# 说明: 一般情况下,主进程用来等待,真正的任务在子进程中执行

from multiprocessing import Pool
import os,time

def worker(num):  # 任务
    for i in range(5):
        print("---pid = %d, num = %d---" %(os.getpid(),num))
        time.sleep(1)

po = Pool(3)
for i in range(10):
    print("---%d---" %i)
    po.apply_async(worker,(i,))  # [非阻塞方式] 向进程池中添加任务worker,以及参数(i,)
	# po.apply(worker, (i,))     # [阻塞方式] 添加任务
	
print("---start---")
po.close()  # 关闭进程池,相当于不能再添加新任务
po.join()   # 主进程
print("---end---")

3、进程间通信Queue

进程通信有多种方式:管道、消息队列、socket等,本文只介绍Queue

from multiprocessing import Queue

q = Queue(3)  # 初始化一个Queue对象,该对象最多可以接受3条消息
q.put("message 1")  
q.put_nowait("message 2")
q.get()   # 阻塞
q.get_nowait()  # 不阻塞

if not q.full():  # 先判断消息队列是否满,再写入
if not q.empty(): # 先判断消息队列是否空,再读取

进程池使用Queue

from multiprocessing import Manager,Queue,Pool

q = Manager().Queue()  # 必须使用该方式创建Queue()
po = Pool(3)
po.apply(writefunc,(q,))   # 向进程池中添加任务
po.apply(readfunc,(q,))    # 向进程池中添加任务

4、异步

同步:你喊你朋友吃饭,你朋友在忙,你就一直等着,等你朋友忙完了,一起去吃饭
异步:你喊你朋友吃饭,你朋友在忙,你就说等你忙完了叫我一下,我先去干自己的货去了;当你朋友忙完了,然后告诉你,最后一起去吃饭

from multiprocessing import Pool
import time
import os

def test1():
    print("pid=%d,ppid=%d" %(os.getpid(),os.getppid()))
    time.sleep(2)
    return "OK"

def test2(args):
    print("-----call back---,pid=%d" %os.getppid())
    print("-----call back---,args=%d" % args)

pool = Pool(3)  #进程池中有3个进程,等待执行任务
pool.apply_async(func=test1, callback=test2) # 添加一个任务到进程池中
# 1、先执行test1任务;
# 2、当test1任务完成后,主进程任务将被打断,执行test2任务(test1任务的返回值作为实参传递给test2函数的形参)
# 3、当test2任务完成后,主进程任务继续执行

# 主进程任务
while True:
    time.sleep(1)
    print("---主进程%d再执行---" %os.getpid())
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值