什么是线程进程:资源分配单位线程:cpu执行单位(实体),每一个py文件中就是一个进程,一个进程中至少有一个线程线程的两种创建方式:一from multiprocessing import Process def f1(n):print(n,‘号线程‘)if__name__ == ‘__main__‘:t1 = Thread(target=f1,args=(1,))t1.start()print(‘主线程‘) 二from threading import Thread class MyThread(Thread):def__init__(self,name):super().__init__()self.name = namedef run(self):p...
一、什么是进程?在说什么是进程之前,需要先插入一个进程切换的概念!进程,可以理解为一个正在运行的程序。现在考虑一个场景,假如有两个程序A和B,程序A在执行到一半的过程中,需要读取大量的数据输入(I/O操作),而此时CPU只能静静地等待任务A读取完数据才能继续执行,这样就白白浪费了CPU资源。你是不是已经想到在程序A读取数据的过程中,让程序B去执行,当程序A读取完数据之后,让程序B暂停。这当然没问题,但这里有一个关键...
尝试3次连接数据库import time import random from threading import Thread,Event def connect_db(e):count = 0while count <3:e.wait(0.5) #状态为False的时候,等待1秒结束if e.is_set() == True:print('连接数据库')breakelse:count += 1print('第%s连接失败'%count)else:raise TimeoutError('数据库连接超时') def check_web(e):time.sleep(random.randint(0,3))e.set()e = Event() t1 = Thread(target=connect_db,args=(e,)) ...
一、互斥锁: 1.线程同步能够保证多个线程安全访问竞争资源,最简单的同步机制是引入互斥锁。 2.互斥锁为资源引入一个状态:锁定、非锁定 3.某个线程要更改共享数据是,先将其锁定。此时资源的状态为锁定,其他线程不能更改知道该线程释放资源,将资源的状态编程"非锁定",其他的线程才能再次锁定该资源 4.互斥锁保证了每次只有一个线程进行写入操作,从而保证了多线程情况下数据的正确性。例子: 创建锁 suo = threading.LOc...
广度优先算法:# -*- coding: utf-8 -*- import urllib import urllib.request from bs4 import BeautifulSoup import threading mylock = threading.RLock() class Crawler:unVisitUrl = set()visitedUrl = []def getHtml(self , url):html = ‘‘req = urllib.request.Request(url , headers = {‘Connection‘: ‘Keep-Alive‘,‘Accept‘: ‘text/html, application/xhtml+xml, */*‘,‘Accept-Language‘: ‘en-US,en;q=0.8,z...
1.单线程解决并发方式一import socket import select# 百度创建连接:非阻塞 client1 = socket.socket() client1.setblocking(False) try:client1.connect(('www.baidu.com', 80)) except BlockingIOError as e:pass# 搜狗创建连接:非阻塞 client2 = socket.socket() client2.setblocking(False) try:client2.connect(('www.sogou.com', 80)) except BlockingIOError as e:pass# GitHub创建连接:非阻塞 client3 = socket.socket() c...
import urllib.request import urllib.parse import urllib.error import re import os import sslssl._create_default_https_context = ssl._create_unverified_contextpath = "./images"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36","referer": "https://www.mzitu.com/xinggan/" }def handler_request(url, pageIndex):u...
Pythpn并发编程——多线程与协程目录Pythpn并发编程——多线程与协程1. 进程与线程1.1 概念上1.2 多进程与多线程——同时执行多个任务2. 并发和并行3. Python多线程——futures3.1 多线程用法3.2. 为什么多线程每次只允许只能有一个线程执行?3.3 多线程的缺点4. python协程——asyncio4.1 概念4.2 Asyncio原理4.3 如何使用?4.4. 协程的优点6. 选择多线程还是协程1. 进程与线程1.1 概念上对于操作系统来说,一个任务就是一个进程P...
本文主要对比测试Python的多线程和多进程模块在CPU类型和I/O的任务操作时的效率一 测试CPU消耗类型任务在一台多核CPU的服务器上执行多线程代码,理论上代码执行时会利用多余的CPU核心来提升性能。但是由于Python的GIL的存在,使用多线程来执行CPU繁重的任务,未必能得到性能提升。但是GIL又必不可少,因为在Python解释器中执行线程是不安全的,也就是说为了保证Python线程执行时的安全,Python提供了一个全局锁,同一时刻,只允许一...
一 背景知识 1.进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行。这是这样的设计,大大提高了CPU的利...
Python标准库为我们提供了threading和multiprocessing模块编写相应的多线程/多进程代码,但是当项目达到一定的规模,频繁创建/销毁进程或者线程是非常消耗资源的,这个时候我们就要编写自己的线程池/进程池,以空间换时间。但从Python3.2开始,标准库为我们提供了concurrent.futures模块,它提供了ThreadPoolExecutor和ProcessPoolExecutor两个类,实现了对threading和multiprocessing的进一步抽象,对编写线程池/进程池提供了直接...
1.1 进程考虑一个场景:浏览器,网易云音乐以及notepad++ 三个软件只能顺序执行是怎样一种场景呢?另外,假如有两个程序A和B,程序A在执行到一半的过程中,需要读取大量的数据输入(I/O操作),而此时CPU只能静静地等待任务A读取完数据才能继续执行,这样就白白浪费了CPU资源。你是不是已经想到在程序A读取数据的过程中,让程序B去执行,当程序A读取完数据之后,让程序B暂停。聪明,这当然没问题,但这里有一个关键词:切换。既然是...
概念进程:进程就是一个程序在一个数据集上的一次动态执行过程 程序:代码 数据集:程序执行过程中需要的资源 进程控制块:完成状态保存的单元线程:线程是寄托在进程之上,为了提高系统的并发性 线程是进程的实体 进程是一个资源管理单元、线程是最小的执行单元 线程和进程的关系(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。(2)资源分配给进程,同一进程的所有线程共享该进程的...
一.进程:1.定义:进程最小的资源单位,本质就是一个程序在一个数据集上的一次动态执行(运行)的过程2.组成:进程一般由程序,数据集,进程控制三部分组成:(1)程序:用来描述进程要完成哪些功能以及如何完成(2)数据集:是程序在执行过程中所需要使用的一切资源(3)进程控制块:用来记录进程外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志。3.进程的作用:是想完成多任务并发,进...
###########使用线程完成多任务################from threading import Thread import time#1. 如果多个线程执行的都是同一个函数的话,各自之间不会有影响,各是个的def test():print("----昨晚喝多了,下次少喝点---")time.sleep(1)for i in range(5):t = Thread(target=test)t.start()#############使用类的方式创建线程完成任务###########import threading import timeclass MyThread(threading.Thread):def run(self):for i ...