python多线程,多进程编程。

程,是目前计算机中为应用程序分配资源的最小单位;

进程,是目前计算机中运行应用程序的最小单位;

在实际系统中,其实进程都是被分为进程来实现的,所以参与时间片轮转的是线程

  但是管理应用程序的资源的单位和任务调度的单位都是进程。更像是一个逻辑概念。

线程是进程分出来的更精细的单位,线程间的上下文切换比进程间的上下文切换,要快很多。

  

多进程与多核,这个概念很奇怪,因为进程是不会直接在核心上运行的。

多线程与多核,涉及一个内核线程与用户线程的对应关系

内核线程(Kernel Thread),一般与核心是一一对应的,一个处理核心对应一个内核进程。

目前的计算机,配置一般都是超线程的,即通过硬件冗余,将一个物理核心模拟成两个逻辑处理核心

  对应两个内核线程。所以在操作系统中看到的CPU是实际物理核心的两倍。

  如双核四线程,四核八线程

------------------------------------------------------------------------

  intel的cpu为了实现分支预测等技术,一般每个内核的运算单元是双份的,-------超线程

  服务器方面的物理核心的运算单位,可能会更多,支持更大的超线程

------------------------------------------------------------------------

用户线程与内核线程的对应关系:

  1) 一一对应,由于内核线程很少,所以限制了很多用户线程的执行数量;

  2) 多对一,用户线程很慢,影响调度;

  3) 多对多,目前应用的模式,

  

python中的多进程库,multiprocessing,提供的方法和属性:

属性:authkey,daemon(父进程终止后,自动结束子进程,必须在start之前设置),exitcode,name,pid

方法: Process(target,name,args,kwargs),创建进程对象

    is_live(),进程状态

    join(‘timeout‘),表示等待后台的进程运行结束,如果指定timeout,一定时间后,杀掉进程

    run(),

    start(),

    terminate(),

    join(),等所有的后台子进程执行好;

    cpu_count(),返回当前拥有的cpu的个数,超线程之后的。

进程创建时,target可以指定为一个函数,也可以直接例化一个进程class。

创建函数process:

    

创建class进程,start()之后,会自动调用run()函数:

    

加入daemon属性:并不会等到该worker的process结束,程序就执行结束了。

    

多进程遍历:active_children()

    

还可以加入lock,semaphore,实现对共享资源的控制,event,进程间通信。

  还有进程队列(Queue),和进程管道(Pipe)

Pool,进程池,不需要自己在管理进程的数量,进程池自动管理。

    如果池中的进程数量达到阈值,阻塞其他进程。

参考博客

https://www.cnblogs.com/kaituorensheng/p/4445418.html

原文地址:https://www.cnblogs.com/-9-8/p/8269701.html

时间: 2024-10-08 00:16:51

python多线程,多进程编程。的相关文章

Python多线程多进程那些事儿看这篇就够了~~

自己以前也写过多线程,发现都是零零碎碎,这篇写写详细点,填一下GIL和Python多线程多进程的坑~ 总结下GIL的坑和python多线程多进程分别应用场景(IO密集.计算密集)以及具体实现的代码模块. 目录   0x01 进程 and 线程 and “GIL” 0x02 python多线程&&线程锁&&threading类 0x03 python队列代码实现 0x04 python之线程池实现 0x05 python多进程并行实现 0x01 进程 and 线程 and “

Python的多进程编程

考虑到多线程,都在一个主进程中共享栈变量,在操作同一个局部变量时可能出现絮乱的现象,即使加锁也容易出现死锁的现象,小编在这里再次记录下多进程编程,废话不多说,直接上代码: #!/usr/bin/env python #encoding: utf-8 import multiprocessing import time def process_one(interval): n =5 while n >0: print ("the time is {0}".format(time.c

python - 多线程/多进程

多线程: import threading from multiprocessing import Queue from time import sleep from bs4 import BeautifulSoup from requests import get import re class myThread(threading.Thread): def __init__(self, qlock, queue): threading.Thread.__init__(self) self.q

python中的多线程和多进程编程

注意:多线程和多线程编程是不同的!!! 第一点:一个进程相当于一个要执行的程序,它会开启一个主线程,多线程的话就会再开启多个子线程:而多进程的话就是一个进程同时在多个核上进行: 第二点:多线程是一种并发操作(伪并行),它相当于把CPU的时间片分成一段一段很小的片段,然后分给各个线程交替进行,由于每个片段都很短,所以看上去像平行操作: (1)多线程操作案例: import threading class MyThread(threading.Thread): def __init__(self ,

Python有了asyncio和aiohttp在爬虫这类型IO任务中多线程/多进程还有存在的必要吗?

最近正在学习Python中的异步编程,看了一些博客后做了一些小测验:对比asyncio+aiohttp的爬虫和asyncio+aiohttp+concurrent.futures(线程池/进程池)在效率中的差异,注释:在爬虫中我几乎没有使用任何计算性任务,为了探测异步的性能,全部都只是做了网络IO请求,就是说aiohttp把网页get完就程序就done了. 结果发现前者的效率比后者还要高.我询问了另外一位博主,(提供代码的博主没回我信息),他说使用concurrent.futures的话因为我全

Python 3 并发编程多进程之队列(推荐使用)

Python 3 并发编程多进程之队列(推荐使用) 进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的. 可以往队列里放任意类型的数据 创建队列的类(底层就是以管道和锁定的方式实现): 1 Queue([maxsize]):创建共享的进程队列,Queue是多进程安全的队列,可以使用Queue实现多进程之间的数据传递. 参数介绍: 1 maxsize是队列中允许最大项数,省略则无大小限制. 方法介绍: 1.主要

python多线程、多进程以及GIL

多线程 使用threading模块创建线程 传入一个函数 这种方式是最基本的,即调用threading中的Thread类的构造函数,然后指定参数target=func,再使用返回的Thread的实例调用start()方法,即开始运行该线程,该线程将执行函数func,当然,如果func需要参数,可以在Thread的构造函数中传入参数args=(-).示例代码如下 import threading #用于线程执行的函数 def counter(n): cnt = 0; for i in xrange

Python多线程和多进程谁更快?

python多进程和多线程谁更快 python3.6 threading和multiprocessing 四核+三星250G-850-SSD 自从用多进程和多线程进行编程,一致没搞懂到底谁更快.网上很多都说python多进程更快,因为GIL(全局解释器锁).但是我在写代码的时候,测试时间却是多线程更快,所以这到底是怎么回事?最近再做分词工作,原来的代码速度太慢,想提速,所以来探求一下有效方法(文末有代码和效果图) 这里先来一张程序的结果图,说明线程和进程谁更快 一些定义 并行是指两个或者多个事件

day-3 聊聊python多线程编程那些事

python一开始给我的印象是容易入门,适合应用开发,编程简洁,第三方库多等等诸多优点,并吸引我去深入学习.直到学习完多线程编程,在自己环境上验证完这句话:python解释器引入GIL锁以后,多CPU场景下,也不再是并行方式运行,甚至比串行性能更差.不免有些落差,一开始就注定了这门语言迟早是有天花板的,对于一些并行要求高的系统,python可能不再成为首选,甚至是完全不考虑.但是事情也并不是绝对悲观的,我们已经看到有一大批人正在致力优化这个特性,新版本较老版本也有了一定改进,一些核心模块我们也可

python 使用多进程实现并发编程/使用queue进行进程间数据交换

import time import os import multiprocessing from multiprocessing import Queue, pool """ 一.Python 使用多进程实现并发编程: 因为cpython解释器中有GIL存在的原因(每个进程都会维护一个GIL,jpython解释器没有这个问题),所以在一个进程内, 即使服务器是多核cpu,同一时刻只能有一个线程在执行任务(一个进程内).如果存在较多IO,使用多线程是可以提高处理速度的, 但是