在python中并发是指一次处理多件事,而并行是指一次做多件事。也可以理解为在做事情时,或者计算机的资源需要处理时,在此时刻计算机需要处理资源时而把人做事情映射成计算机工作时可以或者互不干扰处理资源,这也就反射出貌似同步和异步处理时,这就是并行,而并发时计算机的资源需要处理时,在此时刻内具体负责处理的工作或事情,强调的是具体,某个时段内要做的工作,一个可以看做广度,这个可以看做深度,而此时并发处理的资源多了起来,很多的在此时高并发也就衍生出来了。
并发的解决方案有几下几种:
1,队列,缓冲区,
队列先进先出,计算机排顺序的处理资源,
缓冲区,资源处理前有一个缓冲地带可以处理时
2,争抢,
资源需要处理时被某个程序也好,还是什么的东西,反正就是此资源被锁定了资源,而其他就只能继续等待这个资源值了,直到此资源被释放了在重新使用或运行等等。而争抢的模式的弊端在于一旦占据资源时导致其他得不到这个资源,也可能存在资源的浪费等等。
3,预处理,
资源值来临前需要提前需要预加载,预先做好一部分工作,如手机的缓存的功能等
4,提速,
加强提高处理资源的工具,处理器cpu不行了,4核不够上8核,内层不够,8g ,16,32g等
5,消息中间件
这个不同于缓冲,中间件常见的有RabbitMQ、ActiveMQ(Apache)、RocketMQ(阿里Apache)、kafka(Apache),反正就是买服务啦,第三方云等等。
线程
上面图片中此电脑中线程进程可以看一下,是指进程程对计算机程序中资源的分配和调度和使用,线程可以看做轻量级进程,包含在进程之内,线程存在就绪,运行,阻塞,终止四种状态。python中线程使用threaing库,
导入threading库即可。
import threading
def a():
print("111111111111")
print("2222222222222222")
t = threading.Thread(target=a, name='worker') # 线程对象
t.start() #线程启动
在此创建了一个线程对象,target是目标函数,名称等,调用时需要启动start,python并没有线程退出的方案,要么继续执行完毕,或者抛出异常,
import threading
import time
def worker():
count = 0
while True:
if (count > 5):
# raise RuntimeError(count) #抛出
# return
break
time.sleep(1)
print("I'm work------")
count += 1
t = threading.Thread(target=worker, name='worker')
t.start()
print('==End==')
线程如何传参,
import threading
import time
def add(x, y):
print('{} + {} = {}'.format(x, y, x + y, threading.current_thread().ident))
thread1 = threading.Thread(target=add, name='add', args=(4, 5))
thread1.start()
time.sleep(2)
thread2 = threading.Thread(target=add, name='add', args=(5,), kwargs={'y': 4})
thread2.start()
time.sleep(2)
thread3 = threading.Thread(target=add, name='add', kwargs={'x': 4, 'y': 5})
thread3.start()
线程的属性和方法:
在此有了start和run的方法,start和run就是start启动线程时每一个线程需要执行该方法一次,启动了一个新线程,而run时运行该线程函数,并没有启动一个新线程,只是一个普通函数而已。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。