如果您想了解Python/Django循环优化的相关知识,那么本文是一篇不可错过的文章,我们将对pythonfor循环优化进行全面详尽的解释,并且为您提供关于10招教你玩转Python循环优化、Dja
如果您想了解Python / Django循环优化的相关知识,那么本文是一篇不可错过的文章,我们将对pythonfor循环优化进行全面详尽的解释,并且为您提供关于10招教你玩转Python循环优化、Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项(转)、Django 之在 Python 中调用 Django 环境、Django.GitHub Python 网页框架 Django 资源集合的有价值的信息。
本文目录一览:- Python / Django循环优化(pythonfor循环优化)
- 10招教你玩转Python循环优化
- Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项(转)
- Django 之在 Python 中调用 Django 环境
- Django.GitHub Python 网页框架 Django 资源集合
Python / Django循环优化(pythonfor循环优化)
这可能没有您想要的效率高,但是您可以尝试一下。 如果仍然不能满足您的要求,那么我能想到的就是异步执行此操作。
iterator = Prices.objects.filter(website=website)
from collections import defaultdict
result = reduce(lambda acc,prices: acc[prices.date].append((prices.price * 0.01,prices.website)) or acc,filter(lambda x: x.date in labels,iterator),defaultdict(list))
异步执行此操作的一种方法是 使用concurrent.futures module
ThreadPoolExecutor(max_workers = 10)
(您可以这样指定最多工作人员)。
此外,如果您要多个进程,而不是线程。 您只需将 ThreadPoolExecutor 替换为 ProcessPoolExecutor
result = defaultdict(list)
def reducer_function(price):
if price.date in labels:
result[price.date].append((prices.price * 0.01,prices.website))
with concurrent.futures.ThreadPoolExecutor() as executor:
executor.map(reducer_function,iterator)
10招教你玩转Python循环优化
大家好,我是涛哥,本文内容来自 涛哥聊Python ,转载请标原创。
更多Python学习内容:http://ipengtao.com
在Python编程中,循环是最常见的控制结构之一。尽管Python的循环语法简单明了,但在处理大量数据或进行复杂计算时,循环可能会成为性能瓶颈。本文将介绍10种加速Python循环的方法,帮助在保持代码可读性的同时显著提高性能。
1. 使用列表解析(List Comprehensions)
列表解析是一种简洁且高效的创建列表的方式,比传统的for循环更快。
示例代码:
# 传统的for循环
squares = []
for i in range(10):87
squares.append(i**2)
# 使用列表解析
squares = [i**2 for i in range(10)]
2. 使用生成器(Generators)
生成器在处理大量数据时非常有用,它们可以节省内存并提高迭代效率。
示例代码:
# 使用生成器表达式
squares_gen = (i**2 for i in range(10))
# 迭代生成器
for square in squares_gen:
print(square)
3. 使用内置函数(Built-in Functions)
Python内置函数如sum()
、map()
和filter()
经过高度优化,通常比自定义循环更快。
示例代码:
# 传统的for循环
total = 0
for i in range(100):
total += i
# 使用sum()内置函数
total = sum(range(100))
4. 使用NumPy库
NumPy是一个强大的科学计算库,提供了高效的数组操作。使用NumPy数组进行向量化运算可以显著加速循环。
示例代码:
import numpy as np
# 使用传统的for循环计算数组元素平方
arr = [1, 2, 3, 4, 5]
squares = []
for i in arr:
squares.append(i**2)
# 使用NumPy进行向量化运算
arr_np = np.array([1, 2, 3, 4, 5])
squares_np = arr_np**2
5. 使用多线程(Multithreading)
对于I/O密集型任务,可以使用多线程来提高效率。不过需要注意的是,Python的全局解释器锁(GIL)限制了多线程在CPU密集型任务中的性能提升。
示例代码:
import threading
def task(n):
print(f"Processing {n}")
threads = []
for i in range(10):
t = threading.Thread(target=task, args=(i,))
threads.append(t)
t.start()
for t in threads:
t.join()
6. 使用多进程(Multiprocessing)
多进程可以绕过GIL限制,适用于CPU密集型任务。Python的multiprocessing
模块提供了简便的多进程支持。
示例代码:
import multiprocessing
def task(n):
return n**2
if __name__ == ''__main__'':
with multiprocessing.Pool(processes=4) as pool:
results = pool.map(task, range(10))
print(results)
7. 使用Cython
Cython是Python的一个超集,可以将Python代码编译成C语言,从而大幅提高性能。
示例代码:
首先,编写一个简单的Cython代码example.pyx
:
def cython_function(int n):
cdef int i
cdef int total = 0
for i in range(n):
total += i
return total
然后,编译该代码:
$ cythonize -i example.pyx
最后,使用编译后的Cython模块:
import example
print(example.cython_function(1000000))
8. 使用并行计算库(Parallel Computing Libraries)
如Dask和Joblib等并行计算库可以帮助你利用多核处理器来加速循环。
示例代码(使用Joblib):
from joblib import Parallel, delayed
def task(n):
return n**2
results = Parallel(n_jobs=4)(delayed(task)(i) for i in range(10))
print(results)
9. 预分配列表大小
在循环中动态扩展列表会增加开销,预分配列表大小可以提高效率。
示例代码:
# 动态扩展列表
result = []
for i in range(1000):
result.append(i**2)
# 预分配列表大小
result = [None] * 1000
for i in range(1000):
result[i] = i**2
10. 使用Pandas库
Pandas库在处理数据时非常高效,尤其适合处理大型数据集。
示例代码:
import pandas as pd
# 使用传统的for循环计算DataFrame列的平方
data = {''numbers'': [1, 2, 3, 4, 5]}
df = pd.DataFrame(data)
df[''squares''] = None
for i in range(len(df)):
df.at[i, ''squares''] = df.at[i, ''numbers'']**2
# 使用Pandas内置方法
df[''squares''] = df[''numbers'']**2
总结
通过本文介绍的10种方法,可以显著加速Python循环,从而提高代码性能。不同的方法适用于不同的场景,选择最合适的方法将帮助你在处理大数据和复杂计算时事半功倍。
Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项(转)
Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项
参考:https://blog.csdn.net/weixin_40475396/article/details/82971541
1. 编码
unicode,str,bytes在python2和python3中的叫法以及相互转换,具体为:
- 在Python3中的str对象在Python2中叫做unicode,但 bytes 对象在Python2中叫做str,如果想得到一个文本字符串,需要在字符串之前加上前缀 u 或者decode一下。
- 项目中的问题:① python2项目中字符串前加的u可以去掉了,因为在python3中就是一个文本字符串,也就是str对象,②获取阿里云签名的视图函数,涉及到编码问题,需要处理
- 编码问题参考:https://blog.csdn.net/yanghuan313/article/details/63262477
2. Model外键
- python3中Model中字段的外键必须设置on_delete,一般设置为
on_delete=models.DO_NOTHING
,代表删除与关联内容无关 - 同一张表多个字段引用相同的外键需要设置related_name
- Model外键问题参考:https://blog.csdn.net/lht_521/article/details/80605146
3. 判断是否是匿名用户
- django1.8.2是is_anonymous()
- django2.0是is_anonymous
4. Exception
-
-
python2捕获异常是:
-
try:
-
Exception,e
-
pass
-
-
python3捕获异常是:
-
try:
-
Exception as e
-
pass
-
- raise异常直接写字符串到异常中,例如:
-
python2:
-
raise SimpleAjaxException,''Return data should be follow the Simple Ajax Data Format''
-
python3:
-
raise SimpleAjaxException(''Return data should be follow the Simple Ajax Data Format'')
-
5. urls.py
- 静态文件收集:
django1.8:
django2.0:url(r''^static/(?P<path>.*)$'', ''django.views.static.serve'', {''document_root'': settings.STATIC_ROOT})
-
from django.views.static import serve
-
url( r''^static/(?P<path>.*)$'', serve, {''document_root'': settings.STATIC_ROOT})
-
- 导入的文件时,同目录下,不能再直接import了,使用from . import **,
- 绝对导入相对导入参考:https://www.jianshu.com/p/5cc20b88bcf4
6. 中间件类继承
- django1.8.2继承的是object
- django2.0继承的是MiddlewareMixin,导入方法:
from django.utils.deprecation import MiddlewareMixin
7. 字典Dict
- Python 3.0 内的另一个重大改变是字典内dict.iterkeys(),dict.itervalues(),dict.iteritems()方法的删除。取而代之的是:dict.keys(),dict.values(),dict.items()
- dict.haskey()在Python2中存在,但是在Python3中更改为contains_
8. seetings设置
- Django1.8.2中间件配置名称是MIDDLEWARE_CLASSES,Django2.0是MIDDLEWARE
9. 缓存问题
- Python2和Python3对换错的哈希方式不同,上线的时候最好是把缓存清一下。
Bug:上线Python3,因为用户系统问题,上线失败,退回到Python2,此时因为有Python3的缓存,而版本是Python2的版本,导致报错。
解决方式:清除缓存。
10. 用户系统问题
如果两个项目共用一个用户系统,Django2.0项目的用户在登陆状态,如果此时Django1.8项目登陆此用户,再次刷新Django2.0项目的此用户,就需要重新登录。
此问题是因为Django1.8和2.0中间件对哈希的密码校验问题不同导致的request请求时,对象中的 session_id
消失,最终导致数据库中session被清除,目前能暂时解决,绕过这个问题,尚未找到根本原因。
解决办法:
1)在用户表的Model里面添加方法,相当于撤回到python2的验证机制,强制绕过这个登陆时校验密码hash之后跟缓存中的hash密码是否一致。
-
def getattribute(self, item):
-
if item == ''getsessionauthhash'':
-
raise AttributeError
-
return super().getattribute_(item)
2) 回归到第一条,校验用户时,对密码hash,是通过一个固定的值加密码hash的,django1.8和2.0这个固定的值不同,导致密码hash之后跟缓存中的hash密码不一致,如果将不同版本的这个值设为相同的话,就ok了,其实settings.py里面就可以设置,只是不同版本有默认值,就没有在显示设置。如下:
PASSWORD_HASHERS = [ ''core.hasher.CustomPBKDF2PasswordHasher'']
然后再相对于的路径创建文件重写类:比如上面就是在core文件夹下的hasher.py文件重写CustomPBKDF2PasswordHasher类:
-
from django.contrib.auth.hashers import PBKDF2PasswordHasher
-
class CustomPBKDF2PasswordHasher(PBKDF2PasswordHasher):
-
iterations = 20000
11.附上更改过程中看到的不错的文章:
1)Python3.x新特性以及十大变化
2)Django从1.8升级到2.0注意事项
3)Django 外键ForeignKey中的on_delete
Django 之在 Python 中调用 Django 环境
Django 之在 Python 中调用 Django 环境
新建一个 py 文件,在其中写下如下代码:
1 import os
2
3 if __name__ == ''__main__'':
4 os.environ.setdefault(''DJANGO_SETTINGS_MODULE'', ''BMS.settings'')
5
6 import django
7
8 django.setup()
9
10
11 ---------------------------------------
12 # 内容区
Django.GitHub Python 网页框架 Django 资源集合
模块相关:
Channels
简介: Channels 旨在增强 Django 的异步能力,同时让 Django 不仅仅局限于 Request-Response 模型,能够支持 WebSocket,HTTP2 推送和背景任务.
Django-Baker
简介: Django Baker 可以帮助开发者快速启动项目。只要提供 app 名称,Django Baker 就可以根据 models.py 文件中的 models, 自动生成视图,表单,URL,admin 页面以及模板.
Django-Q
简介: Django Q 是一个原生 Django 分布式任务队列处理应用,通过 Python 的 mutliprocessing 模块功能实现.
django-webpack-loader
简介: Django webpack loader 对 webpack-bundle-tracker 的输出结果进行处理,让你可以在自己的 Django 应用中使用生成的 bundles
django-hackathon-starter
简介: django-hackathon-starter 这是一个 Django Web 应用模板程序,可以帮助你快速生成应用,必定能够为你节省大量的开发时间,同时这个库也能用作开发者的学习指南.
django-seed
简介: Django-seed 通过 faker 库,为 Django 模型生成测试数据,该库支持 Python 和 Django 的最新版本.
django-tenants
简介: django-tenants 让 django 驱动的网站支持多个 tenants, 这个功能是通过 PostgreSQL schemas 实现的。这是每个 SASS(软件即服务)网站的核心功能
项目相关:
OSQA
简介:一款免费且开源的问答系统,采用 Python 的 Django 开发框架,基于中国优秀的问答系统 CNProg, 非常类似国外著名的技术问答网站 http://stackoverflow.com .
io
简介: Python+Django 构建的 Blog - 基于 Python+Django 构建的 Blog io by xushvai
LibraryManagement
简介: LibraryManagement 图书管理系统 (Django1.9.1+Bootstrap3)。
CommunityManagement
简介:用 Django 基于组合模式开发的一个小型的社团管理系统。
django-shop
简介: Django 做的开源电子商务网站
weixin_market
简介:基于 mezzanine 与 django 的 web 服务器,微信商城。
deisp
简介:开源 PaaS 系统 Deis 是一个 Django/Celery API 服务器,Python CLI 和一组 Chef cookbooks 合并起来提供一个类似 Heroku 的应用平台,用于公有云和私有云
ASKBOT-devel
简介:一款免费且开源的问答系统,采用 Python 的 Django 开发
taiga-back
简介: Taiga 功能非常强大的项目管理平台。用于初创企业和敏捷开发团队,采用 Django 框架开发,前端基于 AngularJS 实现.
登录乐搏学院官网 http://www.learnbo.com/
或关注我们的官方微博微信,还有更多惊喜哦~
本文出自 “满满李 - 运维开发之路” 博客,请务必保留此出处 http://xmdevops.blog.51cto.com/11144840/1846241
我们今天的关于Python / Django循环优化和pythonfor循环优化的分享就到这里,谢谢您的阅读,如果想了解更多关于10招教你玩转Python循环优化、Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项(转)、Django 之在 Python 中调用 Django 环境、Django.GitHub Python 网页框架 Django 资源集合的相关信息,可以在本站进行搜索。
本文标签: