没有合适的资源?快使用搜索试试~ 我知道了~
首页Python 多线程+多进程简单使用教程,如何在多进程开多线程
一、Python多进程多线程 关于python多进程多线程的相关基础知识,在我之前的博客有写过,并且就关于python多线程的GIL锁问题,也在我的一篇博客中有相关的解释。 为什么python多线程在面对IO密集型任务的时候会产生加速作用? 为什么python多线程在面对CPU计算密集型任务的时候不仅起不到加速作用,反而加长了计算时间? 相关传送门: 进程,线程,协程关系:https://blog.csdn.net/qq_35869630/article/details/105747155 python线程GIL:https://blog.csdn.net/qq_35869630/articl
资源详情
资源评论
资源推荐

Python 多线程多线程+多进程简单使用教程,如何在多进程开多线程多进程简单使用教程,如何在多进程开多线程
一、一、Python多进程多线程多进程多线程
关于python多进程多线程的相关基础知识,在我之前的博客有写过,并且就关于python多线程的GIL锁问题,也在我的一篇博
客中有相关的解释。
为什么python多线程在面对IO密集型任务的时候会产生加速作用?
为什么python多线程在面对CPU计算密集型任务的时候不仅起不到加速作用,反而加长了计算时间?
相关传送门:
进程,线程,协程关系:https://blog.csdn.net/qq_35869630/article/details/105747155
python线程GIL:https://blog.csdn.net/qq_35869630/article/details/105876923
想了解一下原理的童鞋可以稍微看看~
虽然python多线程有很多局限性,但是在某些时候还是能起到作用的。
因此今天给大家简单介绍python多线程以及怎么结合多进程使用~
二、二、Python多线程使用多线程使用
主要使用的基于exectuor基础模块,这是一个抽象类,其子类分为ThreadPoolExecutor和ProcessPoolExecutor,分别被用来
创建线程池和进程池。
为什么要使用线程池,如果对池的概念有一定理解的应该都知道池的好处,数据库连接池,线程池,进程池等等。
废话不多说,直接上代码
import pandas
def get_df_thread_io(params):
print(params)
sql= """
SELECT *
from test
limit {params}
""".format(params = params)
data = get_data(sql, connection)
time.sleep(2)
return data
def get_slice_thread_io(params):
res_df = pd.DataFrame([])
import concurrent.futures
with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
future_list = {executor.submit(get_df_thread_io,i): i for i in params}
for future in concurrent.futures.as_completed(future_list):
data = future.result()
res_df = res_df.append(data)
return res_df
if __name__ == '__main__':
params = [1,10,100,1000,10000,20000,20000,20000] text_df = get_slice_thread_io(params)
print("result_len:",len(text_df))
仔细跟大家解释一下部分参数
max_workers参数来设置线程池中最多能同时运行的线程数目,如果线程数量超过这个数目则会等待线程执行完才可以拿到
连接执行任务。
submit函数来提交线程需要执行的任务(函数名和参数)到线程池中,并返回该任务的句柄(类似于文件、画图),注意
submit() 不是阻塞的,而是立即返回。
as_completed方法一次取出所有任务的结果。注意这个方法也是堵塞的,会等到所有线程执行完成才会终止。
通过submit函数返回的任务句柄,能够使用 done() 方法判断该任务是否结束。
result() 方法可以获取任务的返回值。这个方法是阻塞的。
{executor.submit(get_df_thread_io,i): i for i in params} 这个写法表示构建get_df_thread_io函数,i 为传入函数的参数,
构建params长度个线程任务。
这里主要构建了一个get_df_thread_io函数用来读取数据库里面的数据,返回的条数为控制的参数。
因为python多线程有GIL锁,因此不管怎么样服务器总是只会用到单个核。
运行结果如下:



















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0