多进程与多线程

多进程与多线程

在大多数场景下面,简单执行单任务就可以完成大部分的任务,但是在一些场景下比如:数据读取、数据加载等情况下,需要同时执行多个任务的情况该怎么去处理呢?

答:

  • 多进程模式
  • 多线程模式
  • 多进程+多线程模式

线程是最小的执行单元,而进程由至少一个线程组成。

多进程

在python中调用进程的方法都在multiprocessing当中

from multiprocessing import Process, Pool

其中Process是开启一个新的进程,而Pool则是开启一个进程池

示例代码如下:

from multiprocessing import Pool
import os, time, random

def multiprocee():
    p = Pool(4)  # 开启一个长度为4的进程池,允许一次性执行4个函数
    for i in range(5):
        p.apply_async(run_proc, args=(i,))
    print('Waiting for all subprocesses done...')
    p.close()
    p.join()
def single_proc():
    p = Process(run_proc, args=('test', ))
    p.start()
    p.join()

其中开启单个新进程用Process(target=函数,args=传入的参数)开启。

p.start()开始执行进程

p.close()关闭进程

p.join()阻塞进程:等待子进程结束后继续运行,常用于子进程间的同步。

多线程

我们前面提到了进程是由若干线程组成的,一个进程至少有一个线程。

由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外

Python的标准库提供了两个模块:_threadthreading,我们只需要使用threading这个高级模块。

import threading
t = threading.Thread(target=loop, name='LoopThread')
t.start()
t.join()

多线程和多进程最大的不同在于,多进程中,同一个变量,各自有一份拷贝存在于每个进程中,互不影响,而多线程中,所有变量都由所有线程共享,所以,任何一个变量都可以被任何一个线程修改,因此,线程之间共享数据最大的危险在于多个线程同时改一个变量,把内容给改乱了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值