flask多线程,线程池,序列化和反序列化

简介: flask多线程,线程池,序列化和反序列化

多线程与多进程


默认的情况下,flask自带的web服务器是以单进程单线程来响应我们的客户端请求。大家很容易想到,10个请求进来是没有办法同时执行的,已给请求执行完之后才能执行另一个请求。


flask自带多线程和多进程,但是有个缺点是无法实现异步。

ps:
1.多进程或多线程只能选择一个,不能同时开启
2.windows环境不支持多进程,只能在linux上使用。
若在windows环境开启多进程,即设置processes 大于1,即报错。
# 1.threaded : 多线程支持,默认为False,即不开启多线程;
app.run(threaded=True)
# 2.processes:进程数量,默认为1.
app.run(processes=True)

线程池


概念:


线程池就是首先创建一些线程,它们的集合称为线程池。使用线程池可以很好地提高性能。


线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会启动一条线程来执行这个任务,执行结束以后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。


python中的线程池:


从 Python3.2 开始,标准库为我们提供了 concurrent.futures 模块,它提供了 ThreadPoolExecutor 和 ProcessPoolExecutor两个类,实现了对 threading 和 multiprocessing 的进一步抽象,不仅可以自动调度线程,还可以做到:


1.主线程可以获取某一个线程(或者任务的)的状态,以及返回值。


2.当一个线程完成的时候,主线程能够立即知道。


3.让多线程和多进程的编码接口一致。


下面展示线程池的 例子

1.task=executor.submit() #提交任务到线程池中
2.task.done() #判断任务是否完成
3.task.cancel() #取消任务,已在线程池运行的无法取消
4.task.result() #获得执行结果
from concurrent.futures import ThreadPoolExecutor
executor = ThreadPoolExecutor(4)
task=executor.submit(get_return,re_url,result)#子线程
return json.dumps()#主线程
def get_return(re_url,result):
  requests.post(re_url, json=result)

JSON序列化和反序列化


序列化: json的dumps方法可以把dict类型转化成str的类型。


反序列化:json的loads方法可以把str类型转化成dic的类型。


下面展示 例子

在调用接口传输json时,如果不进行序列化和反序列化,接收方可能会无法准确收到数据。
result = {"res":res,"res2":res2}
json_data = json.dumps(result)
new_data = json.loads(json_data)
requests.post(url=re_url, json=new_data)
目录
相关文章
|
6天前
|
存储 监控 安全
一天十道Java面试题----第三天(对线程安全的理解------>线程池中阻塞队列的作用)
这篇文章是Java面试第三天的笔记,讨论了线程安全、Thread与Runnable的区别、守护线程、ThreadLocal原理及内存泄漏问题、并发并行串行的概念、并发三大特性、线程池的使用原因和解释、线程池处理流程,以及线程池中阻塞队列的作用和设计考虑。
|
17天前
|
存储 开发框架 .NET
解锁SqlSugar新境界:利用Serialize.Linq实现Lambda表达式灵活序列化与反序列化,赋能动态数据查询新高度!
【8月更文挑战第3天】随着软件开发复杂度提升,数据查询的灵活性变得至关重要。SqlSugar作为一款轻量级、高性能的.NET ORM框架,简化了数据库操作。但在需要跨服务共享查询逻辑时,直接传递Lambda表达式不可行。这时,Serialize.Linq库大显身手,能将Linq表达式序列化为字符串,实现在不同服务间传输查询逻辑。结合使用SqlSugar和Serialize.Linq,不仅能够保持代码清晰,还能实现复杂的动态查询逻辑,极大地增强了应用程序的灵活性和可扩展性。
44 2
|
1天前
|
缓存 Java
异步&线程池 线程池的七大参数 初始化线程的4种方式 【上篇】
这篇文章详细介绍了Java中线程的四种初始化方式,包括继承Thread类、实现Runnable接口、实现Callable接口与FutureTask结合使用,以及使用线程池。同时,还深入探讨了线程池的七大参数及其作用,解释了线程池的运行流程,并列举了四种常见的线程池类型。最后,阐述了在开发中使用线程池的原因,如降低资源消耗、提高响应速度和增强线程的可管理性。
异步&线程池 线程池的七大参数 初始化线程的4种方式 【上篇】
|
2天前
|
Java
多线程线程同步
多线程的锁有几种方式
|
7天前
|
缓存 监控 Java
Java性能优化:从单线程执行到线程池管理的进阶实践
在Java开发中,随着应用规模的不断扩大和用户量的持续增长,性能优化成为了一个不可忽视的重要课题。特别是在处理大量并发请求或执行耗时任务时,单线程执行模式往往难以满足需求,这时线程池的概念便应运而生。本文将从应用场景举例出发,探讨Java线程池的使用,并通过具体案例和核心代码展示其在实际问题解决中的强大作用。
22 1
|
9天前
|
调度 Python
|
11天前
|
安全 算法 Java
17 Java多线程(线程创建+线程状态+线程安全+死锁+线程池+Lock接口+线程安全集合)(下)
17 Java多线程(线程创建+线程状态+线程安全+死锁+线程池+Lock接口+线程安全集合)
51 6
|
11天前
|
存储 安全 Java
17 Java多线程(线程创建+线程状态+线程安全+死锁+线程池+Lock接口+线程安全集合)(中)
17 Java多线程(线程创建+线程状态+线程安全+死锁+线程池+Lock接口+线程安全集合)
53 5
|
8天前
|
Java
Java线程池核心数为0时,线程池如何执行?
【8月更文挑战第11天】Java线程池核心数为0时,线程池如何执行?
21 1
|
11天前
|
存储 安全 Java
17 Java多线程(线程创建+线程状态+线程安全+死锁+线程池+Lock接口+线程安全集合)(上)
17 Java多线程(线程创建+线程状态+线程安全+死锁+线程池+Lock接口+线程安全集合)
46 3