进程:
一些资源的集合。
一个进程里面最少有一个线程,主线程。
线程:
程序执行的最小单位。
import threading
from threading import Thread
import time
先执行主线程
def run():
time.sleep(1)
print('run...') start_time = time.time() # for i in range(5): #串行
# run() # threads = [] for i in range(20):
t1 = Thread(target=run,)
t1.start() # threads.append(t1) # for t in threads:等待所有的线程
# t.join()
# t1.join()#主线程等待子线程执行结束,只等最后一个线程 while threading.active_count()!=1: #判断子线程是否执行结束
pass end_time = time.time() print(end_time - start_time)
#多线程
for url in urls:
t = threading.Thread(target=down_load_pic,args=(url,) ) 注意参数
t.start()

def down_load_pic(url):
#下载图片的url
r = requests.get(url)
file_name = md5(r.content).hexdigest()#把文件md5之后字符串当做文件名
with open(file_name+'.jpg','wb') as fw:
fw.write(r.content)
print('%s下载完成'%file_name)
res.append(file_name)
想要返回值,只能定义一个list
 
电脑CPU有几个核心,就同时只能运行几个任务。

#上下文切换,cpu运行快,切换速度快

python,全局解释器锁,GIL,只能在一个cpu上运行

多个线程同时去操作同一个数据的时候,可能会导致数据不正确。
要把这个数据机上锁,这样同时就只能有一个线程在操作这个数据了。
import threading

count = 0

lock = threading.Lock()  #申请一把锁

def run():
global count
with lock:
count+=1
# lock.acquire()#加上锁
# count+=1
# lock.release()#释放 for i in range(10):
t = threading.Thread(target=run)
t.start() while threading.active_count()!=1:
pass print(count)
守护线程:
守护主线程,主线程执行完成之后,子线程立即结束。
import threading
import time
def run():
time.sleep(5)
print('run。。。') for i in range(100):
puren = threading.Thread(target=run)
puren.setDaemon(True)#设置子线程为守护线程
puren.start() print('over')
多线程

多进程
可以利用多个cpu的。 IO密集型任务
IO消耗比较多的
多线程
input output
磁盘io
网络io CPU密集型任务
消耗CPU多的,多线程
import multiprocessing
import time
import threading
import requests
def run():
time.sleep(10)
print('run...') if __name__ == '__main__':
for i in range(10):
p = multiprocessing.Process(target=run)
p.start()
while multiprocessing.active_children(): #等待其他子进程运行结束
pass

python简说(二十九)线程,进程的更多相关文章

  1. python简说(十九)操作redis

    一.关系型数据库 mysql.oracle.sql server sql语句来操作数据,数据是存在磁盘上的 非关系型数据库.NOSQL,redis,memcache key = vaule 1.数据是 ...

  2. Python学习札记(二十九) 模块2

    参考:使用模块 NOTE 1.内建sys模块: #!/usr/bin/env python3 import sys 'a test module' __author__ = 'wasdns' def ...

  3. [Python爬虫] 之二十九:Selenium +phantomjs 利用 pyquery抓取节目信息信息

    一.介绍 本例子用Selenium +phantomjs爬取节目(http://tv.cctv.com/epg/index.shtml?date=2018-03-25)的信息 二.网站信息 三.数据抓 ...

  4. Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战 - 多点触控(超详解)

    简介 在网页中我们经常使用缩放操作来便利的查看具体的信息,在appium中使用MultiAction多点触控的类来实现.MultiAction是多点触控的类,可以模拟用户多点操作.主要包含加载add( ...

  5. Python学习(二十九)—— pymysql操作数据库优化

    转载自:http://www.cnblogs.com/liwenzhou/articles/8283687.html 我们之前使用pymysql操作数据库的操作都是写死在视图函数中的,并且很多都是重复 ...

  6. python接口自动化测试二十九:yaml配置文件的写和读

    # 先安装ruamel.yaml模块 写入配置文件: import os# 先安装ruamel.yaml模块from ruamel import yaml # 将字典写入到yamldict = { ' ...

  7. Python学习日记(二十九) 网络编程

    早期的计算机通信需要有一个中间件,A要给B传东西,A必须要把信息传给中间件,B再把从中间件中拿到信息 由于不同机器之间需要通信就产生了网络 软件开发的架构 1.C/S架构 服务器-客户机,即Clien ...

  8. Web 开发人员和设计师必读文章推荐【系列二十九】

    <Web 前端开发精华文章推荐>2014年第8期(总第29期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  9. 第三百二十九节,web爬虫讲解2—urllib库爬虫—ip代理—用户代理和ip代理结合应用

    第三百二十九节,web爬虫讲解2—urllib库爬虫—ip代理 使用IP代理 ProxyHandler()格式化IP,第一个参数,请求目标可能是http或者https,对应设置build_opener ...

  10. 剑指Offer(二十九):最小的K个数

    剑指Offer(二十九):最小的K个数 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/baid ...

随机推荐

  1. python-列表解析、字典解析、集合解析

    列表解析.字典解析.集合解析 列表解析 生成一个列表 nums = [1, 3, 9] list_gen = [num**2 for num in nums if x <= 5] # [1, 9 ...

  2. mysql的in和not in的用法(特别注意not in结果集中不能有null)

    1. not in的结果集中出现null则查询结果为null; 例如下面sql中,含有list中null值,无法正确查询结果: SELECT COUNT(name) FROM CVE WHERE na ...

  3. redhat7.5在H3C机器上黑屏无显

    现象:H3C机器上,PXE安装/ISO安装系统,多用户模式启动,过内核启动界面后,屏幕黑屏无显,但是可以通过SSH登陆系统,服务正常 环境:redhat7.5/H3C R4900G3/Purely平台 ...

  4. python windows 安装gensim

    安装gensim要确定numpy和scipy安装 再安装gensim

  5. why big data

    很多人都知道大数据很火,就业很好,薪资很高,想往大数据方向发展.但该学哪些技术,学习路线是什么样的呢?用不用参加大数据培训呢?如果自己很迷茫,为了这些原因想往大数据方向发展,也可以,那么大讲台老师就想 ...

  6. 软工网络15团队作业4——Alpha阶段敏捷冲刺3.0

    软工网络15团队作业4--Alpha阶段敏捷冲刺3.0 1.每天举行站立式会议,提供当天站立式会议照片一张. 2.项目每个成员的昨天进展.存在问题.今天安排. 成员 昨天已完成 今天计划完成 郭炜埕 ...

  7. 软工网络15团队作业4——Alpha阶段敏捷冲刺5.0

    1.每天举行站立式会议,提供当天站立式会议照片一张. 2.项目每个成员的昨天进展.存在问题.今天安排. 成员 昨天已完成 今天计划完成 郭炜埕 完善新建话题界面 实现前端各界面的跳转连接 郑晓丽 进行 ...

  8. 3.用Thead子类及Runnable接口类实现车站购票的一个场景(static关键字)

    如上图所示,我们这里模拟一下去车站买票的情形:这里有3个柜台同时售票,总共是1000张票,这三个柜台同时买票,但是只能一个柜台卖同一张票,也就是说1号票卖了之后我们就只能买2号票,2号票卖了之后我们只 ...

  9. Block 循环引用(中)

    不会造成循环引用的block 大部分GCD方法 dispatch_async(dispatch_get_main_queue(), ^{ [self doSomething]; }); 因为self并 ...

  10. SQL 中的连接查询

    关于SQL的应用,肯定离不开查询,而相对复杂的查询,总是离不开对表的连接,单个表操作的并不罕见,但是在应用环境大多数的查询都是针对2.3个表甚至更多的表7,至于连接,有内连接.外链接.交叉连接之分,每 ...