day9-Python学习笔记(二十二)多线程,多进程

摘要:
//www.bestest.cn']]start_时间=时间。time()threads=[]#为urlinurs:args=())t.start()守护程序线程存储刚启动的线程。pyimportThreadimportTimedefpz():时间。sleep(2)print(“我是秦始皇的葬礼”)threads=[]foriinrange(10):

多线程,多进程

多线程:
咱们打开的程序都一个进程。
线程是包含在进程里的。
进程里面最少有一个线程
线程之间是互相独立的
主线程

cpu是几核的,就只能同时运行几个进程

python的多线程是利用不了多核cpu的,GIL 全局解释器锁的
如果想利用多核cpu的话,就是用多进程

I0密集型任务
使用io比较多的 多线程
cpu密集型任务
多进程 能使用多核cpu
使用cpu比较多的

多线程.py

import threading
import time
import requests

def downHtml(url,name):
conent = requests.get(url).content
f = open(name+'.html','wb')
f.write(conent)
f.close()
urls = [
['nnzhp','http://www.nnzhp.cn'],
['dsx','http://www.imdsx.cn'],
['besttest','http://www.besttest.cn']
]
start_time = time.time()
threads = [] #存放刚才启动线程
for url in urls:
t = threading.Thread(target=downHtml,args=(url[1],url[0]))
t.start()
threads.append(t)

for t in threads: #等待3个子线程
t.join() #主线程等待子线程

end_time = time.time()
print(end_time-start_time)

# start_time = time.time()
# for url in urls:
# downHtml(url[1],url[0])
# end_time = time.time()
# print(end_time-start_time)
# for i in range(10):
# t = threading.Thread(target=sayHi,args=('小黑',)) #启动线程
# t.start()#运行

多线程2.py
import threading
urls = list(range(100))
# 100个 启动5个线程
def p(urls):
for u in urls:
print(u)

for i in range(5):
# urls[:20] 每次取的值
# urls[20:40]
# urls[40:60]
# urls[60:80]
# urls[80:]
t = threading.Thread(target=p,args=())
t.start()

守护线程.py
import threading
import time
def pz():
time.sleep(2)
print('我是秦始皇的陪葬')
threads = []
for i in range(10):
t = threading.Thread(target=pz)
t.setDaemon(True)#设置子线程为守护线程
# 守护线程就是,一旦主线程执行结束,那么子线程立刻结束,不管子线程有没有运行完
t.start()
threads.append(t)
for t in threads:
t.join() #如果主线程等待子线程的话,那么设置的守护线程就不好使了
print('done')

# 进程快
# 还是线程快
 
#如果多线程执行的函数 想获取到结果的话,那么就得把它的结果写到一个list里面
res = []
import requests
def lida(x,y):
res.append(x+y)
import threading
for i in range(5):
t = threading.Thread(target=lida,args=(i,i))
t.start()
print(res)

线程锁
import threading
from threading import Lock
num = 0
lock = Lock() # 申请一把锁
def run():
global num
lock.acquire() # 加锁
num += 1
lock.release() # 解锁
lis = []
for i in range(5):
t = threading.Thread(target=run)
t.start()
lis.append(t)
for t in lis:
t.join()
print('over', num)

#加锁是为了多线程的时候同时修改一个数据的时候 有可能会导致数据不正确

#python3里面锁 你不加也无所谓,它会自动的给你加上锁

多进程.py
import multiprocessing,threading
import time
def run2():
print('这是多线程启动的')
def run():
time.sleep(2)
for i in range(5):
t = threading.Thread(target=run2)
t.start()
if __name__ == '__main__':
for i in range(5):
p = multiprocessing.Process(target=run)
p.start()



免责声明:文章转载自《day9-Python学习笔记(二十二)多线程,多进程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇jQuery中兄弟元素、子元素和父元素的获取windows系统下将"java -jar"注册成 windows 服务,windows 查看端口占用并关闭下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python之并发编程(二)进程

进程 multiprocessing模块介绍 python中的多线程无法利用CPU资源,在python中大部分情况使用多进程。python中提供了非常好的多进程包multiprocessing。 multiprocessing模块用来开启子进程,并在子进程中执行功能(函数),该模块与多线程模块threading的编程接口类似。 multipro...

Python学习日记(十九) 模块导入

模块导入 当文件夹中有这样一个自定义的command模块 在它的内部写下下列代码: print('这个py文件被调用!') def fuc(): print('这个函数被调用!') 然后我们在command模块中执行下列代码: import command #这个py文件被调用! 我们如果在这段程序中反复执行多次这一段代码,这一个文...

PAT 1014. 福尔摩斯的约会 (20)

大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间“星期四 14:04”,因为前面两字符串中第1对相同的大写英文字母(大小写有区分)是第4个字母'D',代表星期四;第2对相同的...

网页仿 Office 2003 的工具条

网页仿 Office 2003 的工具条   [ 日期:2005-01-27 ]   [ 来自:网上摘录 ]<html><head><meta http-equiv="Content-Language" content="zh-cn"><meta http-equiv="Content-Type" content=...

python(3)- 循环语句:从最内层跳出多层循环

跳出多层循环:三层循环,最里层直接跳出3层方法一: 在Python中,函数运行到return这一句就会停止,因此可以利用这一特性,将功能写成函数,终止多重循环 def work(): #定义函数 for i in range(5): print("i=", i)...

Electron截屏功能

# Electron截屏功能 window下增加该功能,可以调用三方的exe文件然后通过node.js的原生模块,execFile启动该exe文件。 mac下则可以通过screencapture 来调用系统的截屏功能来实现 globalShortcut.register('CommandOrControl+Alt+Z', function () { i...