多进程

2019.09.18学习整理 锁,多线程vs多进程

随声附和 提交于 2019-11-30 01:02:42
2019.09.18学习整理 线程锁 同步锁(线程的互斥锁) 多线程修改数据会造成混乱 from threading import Thread,current_thread,Lock import time x = 0 def task(): global x for i in range(100000): # 最少10万级别才能看出来 x = x+1 # 有可能右边的x刚拿到了0, # 发生线程不安全的原因: # t1 x+1 阶段 x = 0 保存了状态 cpu被切走 t2 x+1 x = 0 保存了状态 cpu被切走 # 下次t1 继续运行代码 x = 0+1 下次t2 再运行代码的时候也是 x = 0+1 # 也就说修改了两次 x 只加了一次1 。 # time.sleep() # lock.release() if __name__ == '__main__': t_list = [] for i in range(3): t = Thread(target=task) t_list.append(t) t.start() for i in t_list: i.join() print(x) # 99 使用线程锁解决线程修改数据混乱问题 from threading import Thread,current_thread,Lock import time x = 0

python多线程建立代理ip池

假装没事ソ 提交于 2019-11-29 16:43:31
之前有写过用单线程建立代理ip池,但是大家很快就会发现,用单线程来一个个测试代理ip实在是太慢了,跑一次要很久才能结束,完全无法忍受。所以这篇文章就是换用多线程来建立ip池,会比用单线程快很多。之所以用多线程而不是多进程,是因为测试时间主要是花费在等待网络传递数据上,处理本地计算的时间很短,用多线程能更好地发挥单核性能,而且多线程开销比多进程开销小得多。当然,单核性能会有极限,如果想再提高性能就需要多进程和多线程混用了。当然这里说的是用CPython作为解释器时候的情况,因为绝大多数人用的都是CPython,所以以下说的都是这种情况。 受限于个人学识,对多进程和多线程的理解也不是很深刻,如果以后有机会会写写关于并发编程的文章。CPython因为GIL锁的原因,多线程无法发挥多核性能,但是可以用多进程来发挥多核性能。注意GIL锁不是python语言特性,只是CPython解释器的原因。任何python线程在执行前,都必须获得GIL锁,然后每执行100条字节码,解释器就自动释放GIL锁,让别的线程执行。所以python线程只能交替执行,即使有多个线程跑在多核CPU上,也只能利用一个核。 其实程序主体在之前的文章已经写好了,我们需要的只是稍微做点改进,以适合多线程编程。我的思路是,设置一个线程专门用来爬取待测试ip,其他线程获取待测试ip进行测试。这也是分布式编程的思想。

多线程、多进程、协程爬虫

落爺英雄遲暮 提交于 2019-11-29 13:31:58
多线程、多进程、协程爬虫 对于操作系统来说,一个任务就是个进程(Process) ,比如打开 个vs code就是启动个vs code进程,打开一个vim就启动了 一个vim进程,打开vim就启动了vim进程,打开个Word就启动了个Word进程。 有些进程还不止同时干件事,比如word 它可以同时进行打字、 拼写检查、打印等事情。在一个进程内部, 要同时干多件事,就需要 同时运行多个“子任务”,我们把进程内的这些“子任务”称为线程(Thread). 进程、线程、协程的区别 多进程模式最大的优点就是稳定性高,因为一个子进程崩溃了,不会影响主进程和其他子进程。(当然主 进程挂了所有进程就全挂了,但 是Master进程只负责分配任务,挂掉的概率低,蓍名的Apache最早就是采用多进程模式。 来源: https://blog.csdn.net/qq_41228218/article/details/100823135

python多线程以及多进程的坑

杀马特。学长 韩版系。学妹 提交于 2019-11-29 10:29:34
多线程   Python一个程序好像最多能同时启用4个,这样就只能用来处理一些能较快完成的问题,如果要大量的常驻线程的话应该没有解决的办法。可以使用多进程来搞定。 多进程   Python的多进程在IDE中使用会报错(至少pycharm是),只能在终端执行,其他的还好。 来源: https://www.cnblogs.com/fanhuo/p/11515516.html

多进程

荒凉一梦 提交于 2019-11-29 06:52:09
1.开启进程的两种方法 第一种: from multiprocessing import Process import time def tak(name): print('%s 进程' % name) time.sleep(2) print('%s 子进程 ' % name) if __name__ =='__main__': p1 = Process(target=tak,args=(1,)) # 创建线程 p2 = Process(target=tak,args=(2,)) p3 = Process(target=tak,args=(3,)) p4 = Process(target=tak,args=(4,)) p5 = Process(target=tak,args=(5,)) p1.start() # 向操作系统发送请求执行命令,但是操作系统什么时候执行就是操作系统的事了 p2.start() p3.start() p4.start() p5.start() print('主') 结果: 主 # 先运行的是主进程 1 进程 2 进程 4 进程 3 进程 5 进程 # 这里是会堵塞的,因为上面sleep了2秒,所有子进程都在这里进行堵塞了2秒后再进行打印,这里的结果为什么不是按顺序的,因为执行是操作系统进行执行的,你只能提交请求 1 子进程 2 子进程 4 子进程 3

对于多进程和多线程的理解(待补充)

我怕爱的太早我们不能终老 提交于 2019-11-29 06:50:27
1、概念   先来说说概念。说到并发的概念就要先构建对多任务编程的认识。多任务编程的意义是充分利用计算机多核资源,提高程序的运行效率。实现方式有并发和并行两种。    并发 :同时处理多个任务,内核在任务间不断的切换达到好像多个任务被同时执行的效果,实际每个时刻只有一个任务占有内核。    并行 :多个任务利用计算机多核资源在同时执行,此时多个任务间为并行关系。   那么并发编程又有两种实现方式:多进程和多线程。    进程 :程序在计算机中的一次运行。   程序是一个可执行的文件,是静态的占有磁盘。   进程是一个动态的过程描述,占有计算机运行资源,有一定的生命周期。    线程 :【1】 线程被称为轻量级的进程      【2】 线程也可以使用计算机多核资源,是多任务编程方式      【3】 线程是系统分配内核的最小单元      【4】 线程可以理解为进程的分支任务 2、多进程和多线程在不同使用场景下的选择   多进程和多线程最大的特点——“进程是资源分配的最小单位,线程是程序执行的最小单位”    进程和线程的优缺点总结 :      进程优点:编程、调试简单,可靠性较高。     进程缺点:创建、销毁、切换速度慢,内存、资源占用大。     线程优点:创建、销毁、切换速度快,内存、资源占用小。     线程缺点:编程、调试复杂,可靠性较差。    进程线程的区别与联系:

python之多进程间通信

只愿长相守 提交于 2019-11-29 04:14:59
多进程之间,默认是不共享数据 通过Queue(队列Q)可以实现进程间的数据传递 Q本身是一个消息队列 from multiprocessing import Queue q = Queue ( 3 ) q . put ( '消息01' ) q . put ( '消息02' ) q . put ( '消息03' ) print ( q . full ( ) ) 》》》 Ture 可以使⽤multiprocessing模块的Queue实现多进程之间的数据传递 初始化Queue()对象时(例如: q=Queue()) , 若括号中没有指定最⼤可接收的消息数量, 或数量为负值, 那么就代表可接受的消息数量没有上限 Queue.qsize(): 返回当前队列包含的消息数量 Queue.empty(): 如果队列为空, 返回True, 反之False Queue.full(): 如果队列满了, 返回True,反之False Queue.get([block[, timeout]]): 获取队列中的⼀条消息, 然后将其从列队中移除, block默认值为True —如果block使⽤默认值, 且没有设置timeout(单位秒) , 消息列队如果为空, 此时程序将被阻塞(停在读取状态) , 直到从消息列队读到消息为⽌,如果设置了timeout, 则会等待timeout秒, 若还没读取到任何消息,

python多线程、多进程、协程笔记

倖福魔咒の 提交于 2019-11-28 23:57:57
import threading import time import multiprocessing import asyncio movie_list = ['斗破.avi', '复仇者联盟.mp4', '斗罗大陆.rmvb'] music_list = ['七里香.mp3', '美人鱼.mp3', 'xxx.obi'] movie_format = ['avi', 'mp4', 'rmvb'] music_format = ['mp3'] def play(playlist): for i in playlist: if i.split('.')[1] in movie_format: print('您现在正在收看:{}'.format(i)) time.sleep(2) elif i.split('.')[1] in music_format: print('您现在正在收听:{}'.format(i)) time.sleep(2) else: print('该文件格式不支持:{}'.format(i)) time.sleep(2) async def async_play(playlist): for i in playlist: if i.split('.')[1] in movie_format: print('您现在正在收看:{}'.format(i)) await

python基础一 day 36j多进程

▼魔方 西西 提交于 2019-11-28 22:54:40
1.多进程: import os import time from multiprocessing import Process def func(args,args2): print(args,args2) time.sleep(3) print('子进程 :', os.getpid()) print('子进程的父进程 :', os.getppid()) print(12345) if __name__ == '__main__': p = Process(target=func,args=('参数','参数2')) # 注册 # p是一个进程对象,还没有启动进程 p.start() # 开启了一个子进程 print('*'*10) print('父进程 :',os.getpid()) # 查看当前进程的进程号 print('父进程的父进程 :',os.getppid()) # 查看当前进程的父进程 # 进程的生命周期 # 主进程 # 子进程 # 开启了子进程的主进程 : # 主进程自己的代码如果长,等待自己的代码执行结束, # 子进程的执行时间长,主进程会在主进程代码执行完毕之后等待子进程执行完毕之后 主进程才结束 2.多进程中的几个方法 # join() import time from multiprocessing import Process def func(arg1