好文档 - 专业文书写作范文服务资料分享网站

黑马程序员高并发是什么、高并发编程、高并发解决方案 - 图文 

天下 分享 时间: 加入收藏 我要投稿 点赞

# 最大客户客户端并发数量,对使用线程和协程的worker的工作有影响

worker_connections = 1200

# 进程名称

proc_name = 'gunicorn.pid'

# 进程pid记录文件

pidfile = 'app_run.log'

# 日志等级

loglevel = 'debug'

# 日志文件名

logfile = 'debug.log'

# 访问记录

accesslog = 'access.log'

# 访问记录格式

access_log_format = '%(h)s %(t)s %(U)s %(q)s'

黑马程序员免费视频库:http://yun.itheima.com?2020sxkyk

# 运行方式 命令行

gunicorn -c gunicorn_config.py flask_server:app

使用 meinheld + gunicorn + flask 开启高并发神器

前提在虚拟环境中安装meinheld:

pip install meinheld

import multiprocessing

\的配置文件\

# 预加载资源

preload_app = True

# 绑定

bind = \

# 进程数: cup数量 * 2 + 1

workers = multiprocessing.cpu_count() * 2 + 1

# 线程数 cup数量 * 2

黑马程序员免费视频库:http://yun.itheima.com?2020sxkyk

threads = multiprocessing.cpu_count() * 2

# 等待队列最大长度,超过这个长度的链接将被拒绝连接

backlog = 2048

# 工作模式

worker_class = \

# 最大客户客户端并发数量,对使用线程和协程的worker的工作有影响

worker_connections = 1200

# 进程名称

proc_name = 'gunicorn.pid'

# 进程pid记录文件

pidfile = 'app_run.log'

# 日志等级

loglevel = 'debug'

# 日志文件名

黑马程序员免费视频库:http://yun.itheima.com?2020sxkyk

logfile = 'debug.log'

# 访问记录

accesslog = 'access.log'

# 访问记录格式

access_log_format = '%(h)s %(t)s %(U)s %(q)s'

# 运行方式 命令行

gunicorn -c gunicorn_config.py flask_server:app

拓展

概念:协程就是协同工作的程序,不是进程也不是线程 理解成--不带返回值的函数调用。

Coroutine:协程,又称微线程,纤程。

协程的这种“挂起”和“唤醒”机制实质上是将一个过程切分成了若干个子过程,给了我们一种以扁平的方式来使用事件回调模型。优点:共享进程的上下文,一个进程可以创建百万,千万的coroutine。

python中的yield和第三方库greenlet,都可以实现协程。

黑马程序员免费视频库:http://yun.itheima.com?2020sxkyk

greenlet 提供了在协程中直接切换控制权的方式,比生成器(yield)更加灵活、简洁。

历史遗留问题—GIL锁

1.线程安全是在多线程的环境下,线程安全能够保证多个线程同时执行时程序依旧运行正确,而且要保证对于共享的数据,可以由多个线程存取,但是同一时刻只能有一个线程进行存取。每一个interpreter进程,只能同时仅有一个线程来执行,获得相关的锁,存取相关的资源。那么很容易就会发现,如果一个interpreter进程只能有一个线程来执行,多线程的并发则成为不可能,即使这几个线程之间不存在资源的竞争。

2.所以虽然 CPython的线程库直接封装操作系统的原生线程,但CPython进程做为一个整体同一时间只会有一个获得了GIL的线程在跑,其它的线程都处于等待状态等着 GIL的释放。所以只能使用cpu单核。这也是python多线程被人诟病的原因。

解决方案:python的高并发更加推荐多进程+协程 io多路复用

IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。

1. select(线程不安全):它通过一个select()系统调用来监视多个文件描述符的数组,当select()返回后,该数组中就绪的文件描述符便会被内核修改标志位,使得进程可以获得这些文件描述符从而进行后续的读写操作。

黑马程序员免费视频库:http://yun.itheima.com?2020sxkyk

黑马程序员高并发是什么、高并发编程、高并发解决方案 - 图文 

#最大客户客户端并发数量,对使用线程和协程的worker的工作有影响worker_connections=1200#进程名称proc_name='gunicorn.pid'#进程pid记录文件pidfile='app_run.log'#日志等级l
推荐度:
点击下载文档文档为doc格式
6jmcj9bgwq7f2vc1v0ey6gjog0oh070065e
领取福利

微信扫码领取福利

微信扫码分享