Fork me on GitHub

分类 python 中的文章

python pip

介绍 pip python第三方库管理工具,从 Python 3.4 开始,pip 已经内置在 Python。 升级 pip install --upgrade pip 或 pip install -U pip 安装第三方库 pip install package_name==包版本 批量安装 pip install -r requirements.txt cat requirements.txt tensorflow==2.3.1 uvicorn==0.12.2 fastapi==0.63.0 卸载 pip uninstall package_name 升级 pip install -U package_name 冻结当前环境 有时您想输出当前环境中所有已安装的包,或生成一个需求文件 pip freeze 查看需要升……

阅读全文

python 简单示例

快速启动一个本地服务 可临时充当文件下载服务 # python2 python -m SimpleHTTPServer 8888 # python3 python3 -m http.server 8888 flask 服务 from flask import Flask app = Flask(__name__) @app.route("/") def hello_world(): result = find_result() return result @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': pass else: pass if __name__ == '__main__': app.run(host='0.0.0.0',port='8000') python app.py gunicorn -w 1 -b 127.0.0.1:4000 app:app 操作PG数据库 import psycopg2 import time conn = None try: conn = psycopg2.connect(database="postgres", user="postgres", host="192.168.*.*", port="5432",password='*****') print("Opened database successfully") cur = conn.cursor() cur.execute("select * from api") rows = cur.fetchall() result = '' all_field = cur.description for filed in all_field: print(filed[0]) for row in rows: result += str(row[0]) result += "\n" print(result) print("Operation done successfully") conn.close() except Exception as e:……

阅读全文

长轮询

长轮询 实现原理: 与传统的轮询方式不同的是,当服务端接收到客户端的请求的时候,如果没有最新消息时不是立刻返回请求,而是等待一个最大超时时间。如果等待期间有最新消息则立刻返回。 相对于暴力的轮询,长轮询能够很大程度的减少客户端与服务端的连接进而缓解服务端的压力。 利用长轮询模拟推送服务,……

阅读全文

联想搜索

Redis 联想搜索实现 基于redis ZSET 例子: 当输入n时显示所有n开头的数据,当输入nb时显示所有nb开头的数据。 # 数据录入 127.0.0.1:6379> ZADD ss 0 'n' (integer) 1 127.0.0.1:6379> ZADD ss 0 'nb' (integer) 1 127.0.0.1:6379> ZADD ss 0 'nba' (integer) 1 # 搜索n 127.0.0.1:6379> ZRANK ss 'n' (integer) 0 127.0.0.1:6379> ZRANGE ss 0 -1 1) "n" 2) "nb" 3) "nba" # 搜索nb 127.0.0.1:6379> ZRANK ss 'nb' (integer) 1 127.0.0.1:6379> ZRANGE ss 1 -1 1) "nb" 2) "nba"……

阅读全文

消息推送

基于jango channel 实现推送 在官方demo 的基础上自定义推送 Consumer 。 由于只是服务端到客户端单方向推送信息。类中只实现如下3个方法即可 """ connect 建立连接 disconnet 断开连接 push_messages 推送消息 """ from channels.generic.websocket import AsyncWebsocketConsumer # # 推送consumer class PushConsumer(AsyncWebsocketConsumer): async def connect(self): # 将username名称设定为 group 名 # self.group_name = self.scope['url_route']['kwargs']['username'] self.room_name = self.scope['url_route']['kwargs']['room_name'] self.room_group_name = 'chat_%s' % self.room_name await self.channel_layer.group_add( self.room_group_name, self.channel_name ) await self.accept() async def disconnect(self, close_code):……

阅读全文

发布订阅

发布订阅 消息多播,一个发布消息可以同时被多个订阅者收听 常用命令 发布 PUBLISH channel message 订阅 SUBSCRIBE channel [channel ...] PSUBSCRIBE pattern [pattern ...] python demo #!/usr/bin/env python import redis import time redis_pool = redis.ConnectionPool(host="192.168.6.14",port="6379") redis_client = redis.Redis(connection_pool=redis_pool) #生产者 def publishMessages(): while True: redis_client.publish("channel.shenyang","hello news "+time.asctime(time.localtime(time.time()))) time.sleep(2) #消费者 def subscibeMessages(): p = redis_client.pubsub() p.subscribe("channel.shenyang") while True: message = p.get_message() if message: print(message) else: time.sleep(1) ##加入超时时间堵塞读 def subscibeMessages(): p = redis_client.pubsub() p.subscribe("channel.shenyang") while True: message = p.get_message(timeout=10) # 10秒等待 if message: print(message) #阻塞消费者 def subscibeBlockMessages(): p = redis_client.pubsub() p.subscribe("channel.shenyang") for item in p.listen(): print(item['type'])……

阅读全文

基于Redis 的分布式锁实现

分布式锁场景 秒杀抢购茅台,车票 提前预约抢订车位,共享单车 特点,多个用户同一时间对同一个资源进行申请,并且只能允许一个用户申请成功。 分布式锁必要条件 布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行; 高可用的获取锁与释放锁; 高性能的获取锁与释放锁; 具备可重入特性; 具备锁……

阅读全文

python 与 C 交互编程

python 访问C 动态库 很多核心的算法库都是C/C++写的,成果物通常以动态库的方式对外提供。 如何利用python访问动态代码库 python访问C/C++的方式 ctypes pybind11 cffi swig ctypes的优势 不要修改动态库的源码 只需要动态库和头文件 使用比较简单,而且目前大部分库都是兼容C/C++ 参考 https://www.cnblogs.com/gaowengang/p/7919219.html……

阅读全文

Django CONN_MAX_AGE 对数据连接的影响

Django的数据库连接 Django对数据库的链接处理是这样的,Django程序接受到请求之后,在第一访问数据库的时候会创建一个数据库连接,直到请求结束,关闭连接。下次请求也是如此。因此,这种情况下,随着访问的并发数越来越高,就会产生大量的数据库连接 使用CONN_MAX_AGE减……

阅读全文

使用setup打包

使用setup 对python进行打包 将python打包后可在其他项目中直接引用 pip install *** 具体步骤 1 将代码复制到一个新的文件夹下 2 创建README.rst 3 创建 LICENSE 4 编写 setup.py setup.cfg setup.cfg [metadata] name = django-polls version = 0.1 description = A Django app to conduct Web-based polls. long_description = file: README.rst url = https://www.example.com/ author = Your Name author_email = yourname@example.com license = BSD-3-Clause # Example license classifiers = Environment :: Web Environment Framework :: Django Framework :: Django :: X.Y # Replace "X.Y" as appropriate Intended……

阅读全文