python中线程和进程相关

1.操作系统/应用程序

  a : 硬盘 , CPU , 主板 , 显卡 , 内存 , 电源 ...

  b.装系统 (软件)

    系统就是一个由程序员写出来的软件 , 该软件用于控制计算机的硬件 , 让他们之间相互进行配合。

  c.安软件 (安装应用程序)

    QQ

    百度云

    pycharm

    ....

2.操作中的"并发"   (‘并行‘)

    并发 , 伪 , 由于执行速度特别快 , 人感觉不到停顿。

    并行 , 真 , 创建10个人同时操作。

3.其他语言线程 , 进程

  a. 单进程 , 单线程的应用程序

      print(‘666‘)

  b.到底什么是线程 ? 什么是进程 ?

      python自己没有这个点西   ,  python中调用的操作系统的线程和进程

  c.单进程 , 多进程的应用程序

    代码:

import threadin
print(‘666‘)

def func(arg):
print(arg)
t = threading.Thread(target=func)
t.start()

print(‘end‘)

一个应用程序 (软件)  ,  可以有多个进程 (默认只有一个) , 一个进程中可以创建多个线程(默认一个) 。

  d.故事 : 大神与甄嬛传西游记的故事

  故事总结:

      1.操作系统帮助开发者操作硬件。

      2.程序员写好代码在操作系统上运行(依赖解释器)

      3.以前写代码:

import threading
import requests
import uuid

url_list = [
         ‘https://www3.autoimg.cn/newsdfs/g28/M05/F9/98/120x90_0_autohomecar__ChsEnluQmUmARAhAAAFES6mpmTM281.jpg‘,
         ‘https://www2.autoimg.cn/newsdfs/g28/M09/FC/06/120x90_0_autohomecar__ChcCR1uQlD6AT4P3AAGRMJX7834274.jpg‘,
         ‘https://www2.autoimg.cn/newsdfs/g3/M00/C6/A9/120x90_0_autohomecar__ChsEkVuPsdqAQz3zAAEYvWuAspI061.jpg‘,
        ]def task(url):    """"""        """

  1.DNS解析 , 根据域名解析出IP

  2.创建socket客户端   sk = socket.socket.socket()

  3.向服务端发起连接请求 sk.connect()

  4.发送数据 (我要照片)    sk.send(...)

  5.接受数据       sk.recv(8096)

  接受到数据后写入文件。

示例 :  

ret = requests.get(url)
file_name = str(uuid.uuid4()) + ‘.jpg‘
with open(file_name, mode=‘wb‘) as f:
f.write(ret.content)

for url in url_list:
    task()

你写好代码

交给解释器运行 :  python  s1.py

解释器读取代码, 再交给操作系统去执行, 根据你的代码去选择创建多少个线程/进程去执行(单进程/单线程)

4.现在的你,写代码:

import threading
import
import uuid
url_list = [
        ‘https://www3.autoimg.cn/newsdfs/g28/M05/F9/98/120x90_0_autohomecar__ChsEnluQmUmARAhAAAFES6mpmTM281.jpg‘,
        ‘https://www2.autoimg.cn/newsdfs/g28/M09/FC/06/120x90_0_autohomecar__ChcCR1uQlD6AT4P3AAGRMJX7834274.jpg‘,
        ‘https://www2.autoimg.cn/newsdfs/g3/M00/C6/A9/120x90_0_autohomecar__ChsEkVuPsdqAQz3zAAEYvWuAspI061.jpg‘,
            ]

def task(url):

1.DNS解析, 根据域名解析出IP

2.创建socket客户端         sk = socket.socket()

3.向服务端发起连接请求  sk = connect()

4.发送数据(我要照片)       sk = send (....)

5.接受数据                        sk.recv(8096)

接受数据写入文件。

ret = requests.get(url)
file_name = str(uuid.uuid4()) + ‘.jpg‘
with open(file_name, mode=‘wb‘) as f:
f.write(ret.content)

for url in url_list:
    task()
你写好代码交给解释器运行: python s1.py 解释器读取代码,再交给操作系统去执行,根据你的代码去选择创建多少个线程/进程去执行(单进程/单线程)。操作系统调用硬件:硬盘、cpu、网卡....python 多线程情况下:  计算密集型操作:效率低   (GIL锁)  IO操作:效率高python多进程情况下:  计算密集型操作:效率高(浪费资源)  IO操作:效率高(浪费资源)以后写python时:  IO密集型用多线程 : 文件/输入输出/socket网络通信
扩展:    Java多线程情况下:    计算密集型操作:效率高。    IO操作: 效率高 Python多进程的情况下:    计算密集型操作:效率高(浪费资源)。    IO操作: 效率高 浪费资源)。

4. Python中线程和进程(GIL锁)   GIL锁,全局解释器锁。用于限制一个进程中同一时刻只有一个线程被cpu调度。

扩展:默认GIL锁在执行100个cpu指令(过期时间)。

5.python线程编写   
# 1. 计算密集型多线程无用
import threading
v1 = [11,22,33] # +1
v2 = [44,55,66] # 100

def func(data,plus):
    for i in range(len(data)):
        data[i] = data[i] + plus

t1 = threading.Thread(target=func,args=(v1,1))
t1.start()

t2 = threading.Thread(target=func,args=(v2,100))
t2.start()
# 2. IO操作 多线程有用
import threading
import requests
import uuid

url_list = [
    ‘https://www3.autoimg.cn/newsdfs/g28/M05/F9/98/120x90_0_autohomecar__ChsEnluQmUmARAhAAAFES6mpmTM281.jpg‘,
    ‘https://www2.autoimg.cn/newsdfs/g28/M09/FC/06/120x90_0_autohomecar__ChcCR1uQlD6AT4P3AAGRMJX7834274.jpg‘,
    ‘https://www2.autoimg.cn/newsdfs/g3/M00/C6/A9/120x90_0_autohomecar__ChsEkVuPsdqAQz3zAAEYvWuAspI061.jpg‘,
]

def task(url):
    ret = requests.get(url)
    file_name = str(uuid.uuid4()) + ‘.jpg‘
    with open(file_name, mode=‘wb‘) as f:
        f.write(ret.content)

for url in url_list:

    t = threading.Thread(target=task,args=(url,))
    t.start()

1.应用程序/进程/线程  基础了解

2.为什么创建线程

由于线程是cpu工作的最小单元,创建线程可以利用多核优势实现并行操作(Java/C#)。

注意:线程是为了工作。

3.为什么创建进程

进程和进程之间做数据隔离(Java/c#)

注意 : 进程是为了提供环境让线程工作

4. Python

a. Python中存在一个GIL锁。

  造成:多线程无法利用多核优势。

  解决:开多进程处理(浪费资源

总结:

  IO密集型:多线程 

  计算密集型:多进程

b. 线程的创建

  Thread

  MyThread 

c. 其他

  join

  setDeanon

  setName 

  threading.current_thread()

d. 锁

  获得 

  释放

继续完善           

          

4.python中的线程和进程  (GIL锁)

5.python 线程编写 + 锁

原文地址:https://www.cnblogs.com/SUIFAN/p/9623235.html

时间: 2024-10-06 20:33:29

python中线程和进程相关的相关文章

python中线程和进程(一)

目录 进程和线程 Python中的线程 1. Thread类 2. 线程的启动 3. 线程的传参 4. 线程的属性和方法 5. daemon线程和non-daemon线程 6. join方法 7. 定时器Timer 进程和线程 进程:进程是计算机中程序正在执行的实例,是系统进行资源分配和调度的基本单位. 线程:也被称为轻量级进程,是程序执行流的最小单元.一个标准的线程由线程ID,当前指令指针,寄存器集合和堆栈组成. 线程和进程的关系: 现代操作系统中,每一个进程都认为自己独占所有的计算机资源.进

python中线程、进程和协程的区别

进程是资源分配的单位 线程是操作系统调度的单位 协程,又称微线程,纤程,协程的切换只是单纯的操作CPU的上下文,资源很小,效率高 进程切换需要的资源很最大,效率很低 一个程序至少有一个进程,一个进程至少有一个线程 线程执行开销小,但不利于资源的管理和保护:而进程正相反 通俗描述 有一个老板想要开个工厂进行生产某件商品(例如剪子) 他需要花一些财力物力制作一条生产线,这个生产线上有很多的器件以及材料这些所有的 为了能够生产剪子而准备的资源称之为:进程 只有生产线是不能够进行生产的,所以老板的找个工

Python:线程、进程与协程(2)——threading模块(1)

上一篇博文介绍了Python中线程.进程与协程的基本概念,通过这几天的学习总结,下面来讲讲Python的threading模块.首先来看看threading模块有哪些方法和类吧. 主要有: Thread :线程类,这是用的最多的一个类,可以指定线程函数执行或者继承自它都可以实现子线程功能. Timer:与Thread类似,但要等待一段时间后才开始运行,是Thread的子类. Lock :原锁,是一个同步原语,当它锁住时不归某个特定的线程所有,这个可以对全局变量互斥时使用. RLock :可重入锁

Python:线程、进程与协程(4)——multiprocessing模块(1)

multiprocessing模块是Python提供的用于多进程开发的包,multiprocessing包提供本地和远程两种并发,通过使用子进程而非线程有效地回避了全局解释器锁. (一)创建进程Process 类 创建进程的类,其源码在multiprocessing包的process.py里,有兴趣的可以对照着源码边理解边学习.它的用法同threading.Thread差不多,从它的类定义上就可以看的出来,如下: class Process(object):     '''     Proces

Python:线程、进程与协程(3)——Queue模块及源码分析

Queue模块是提供队列操作的模块,队列是线程间最常用的交换数据的形式.该模块提供了三种队列: Queue.Queue(maxsize):先进先出,maxsize是队列的大小,其值为非正数时为无线循环队列 Queue.LifoQueue(maxsize):后进先出,相当于栈 Queue.PriorityQueue(maxsize):优先级队列. 其中LifoQueue,PriorityQueue是Queue的子类.三者拥有以下共同的方法: qsize():返回近似的队列大小.为什么要加"近似&q

Python:线程、进程与协程(7)——线程池

前面转载了一篇分析进程池源码的博文,是一篇分析进程池很全面的文章,点击此处可以阅读.在Python中还有一个线程池的概念,它也有并发处理能力,在一定程度上能提高系统运行效率:不正之处欢迎批评指正. 线程的生命周期可以分为5个状态:创建.就绪.运行.阻塞和终止.自线程创建到终止,线程便不断在运行.创建和销毁这3个状态.一个线程的运行时间可由此可以分为3部分:线程的启动时间.线程体的运行时间和线程的销毁时间.在多线程处理的情景中,如果线程不能被重用,就意味着每次创建都需要经过启动.销毁和运行3个过程

OC中线程的状态相关

1.线程的状态NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];[thread start]; 2.控制线程状态 2.1>启动线程  -(void)start;   //进入就绪状态->运行状态.当线程任务执行完毕,会自动进入死亡状态2.2>阻塞(暂停)线程+(void)sleepUntilDate:(NSDate *)date+(void)sleepF

Python基础—线程、进程和协程

今天已是学习Python的第十一天,来干一碗鸡汤继续今天的内容,今天的鸡汤是:超越别人对你的期望.本篇博客主要介绍以下几点内容: 线程的基本使用: 线程的锁机制: 生产者消费之模型(队列): 如何自定义线程池: 进程的基本使用: 进程的锁机制: 进程之间如何实现数据共享: 进程池: 协程的基本使用. 一.线程 1.创建线程 上篇博客已经介绍过如何创建多线程的程序,在这里在复习一下如何创建线程过程以及线程的一些方法: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1

Python:线程、进程与协程(1)——概念

最近的业余时间主要放在了学习Python线程.进程和协程里,第一次用python的多线程和多进程是在两个月前,当时只是简单的看了几篇博文然后就跟着用,没有仔细去研究,第一次用的感觉它们其实挺简单的,最近这段时间通过看书, 看Python 中文官方文档等等相关资料,发现并没有想想中的那么简单,很多知识点需要仔细去理解,Python线程.进程和协程应该是Python的高级用法.Python的高级用法有很多,看看Python 中文官方文档就知道了,当然有时间看看这些模块是怎么实现的对自己的提高是很有帮