说心理话没明白你的需求。
使用的数据库的原则就是,尽量减小 IO 交互。
方案一、一次性把要用的数据全部取出,放在内存缓存,以后不再访问数据库。
方案二、每次只取用到的最小集合。
为了支持方案二,所有数据库都支持 where 子句和 limit 语法。
select * from table limit m,n
其中 m 是指记录开始的 index,从 0 开始,表示第一条记录
n 是指从第 m+1 条开始,取 n 条。
在常见 ORM 中:
SA 用的是.filter().limit().offset() 来实现对应的 SQL
Django 的 ORM 更简洁一些,Model.objects.filter()[m:n]
一般情况下后面的 python 应用使用 uWSGI 或 gunicorn 跑在两个不同端口号上,前面用 Nginx 对不同域名反向代理 到对应的应用端口就行了。网上例子很多。
Python 3.6.2 (v3.6.2:5fd33b5, Jul 8 2017, 04:57:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> from itertools import groupby as gb, combinations_with_replacement as cwr
>>> from operator import mul, itemgetter as ig
>>> double_nine=lambda right: '\n'.join(map(lambda x: (lambda l: l.ljust(26) if right else l.rjust(26))(' '.join(map(lambda t: str(mul(*t)).rjust(2), ig(1)(x)))), (lambda r: gb(sorted(cwr(range(1,10),2), key=r), r))(ig(right))))
>>>
>>> print(double_nine(right=True))
1
2 4
3 6 9
4 8 12 16
5 10 15 20 25
6 12 18 24 30 36
7 14 21 28 35 42 49
8 16 24 32 40 48 56 64
9 18 27 36 45 54 63 72 81
>>> print(double_nine(right=False))
1 2 3 4 5 6 7 8 9
4 6 8 10 12 14 16 18
9 12 15 18 21 24 27
16 20 24 28 32 36
25 30 35 40 45
36 42 48 54
49 56 63
64 72
81
>>>
基本上培养不了,大部分是先天的。
不是每个人都适合做程序员的,计算机专业毕业的人里做程序员的也是少数。
培训班里出来的最终只有 10%不到的人能走上程序员职业道路。
一看楼主就是个正常人,开发一套操作系统程序员的三大浪漫之一啊。
程序员的三大浪漫被认为是操作系统、编译原理和图形学。
为什么呢,因为都是穷尽个人毕生精力投入未见得有什么摸得着的成果的事业。
楼主之所以有这个想法,就是因为对这件事缺少了解。
你要从问题瓶颈入手来解决而不是上来就拍脑袋用哪个方案。
你的需求不太明确,我也不了解你现有系统的架构和性能参数,所以没办法给你正确的建议。现在就能拍出具体建议的都是大神,请鄙视我。
用哪个方案和场景有关系。你要解决整体性能问题缩短运行时间,还是只是解决阻塞的问题。
另外你充分理解三种资源的特性,网络、CPU、磁盘
比如你的网络带宽 2M,要访问的服务器每个提供的下载带宽 1M。那你开两 2 线程要行了。开 30 线程完全没有用最多也就是 2M 了,这种情况下你优化磁盘写入性能不是扯么,除了扩容你的带宽你用什么也提高不了整体性能了。
如果是运算密集型的任务,比如数据要解压解密再编码,就要考虑开多进程利多核心,如果 CPU 负载很轻只是因为阻塞速度慢,你写成多进程代码要增加复杂度,白浪费精力。
磁盘是串行读写的,传统机械硬盘就一个磁头在那里寻道读写,成批量大块的连续写入方案才能提高性能,这就是为什么硬盘都有缓存。如果写入是瓶颈而你要想的不是开多个线程,而是在内存内开个更大缓存,弄个写入队列之类的。
其实真是一个东西
A 是个客户端,
import urllib.request
把这个 request 给 web 服务器 B 发送过来
在 B 服务器上
from flask import request
之后, 这个 request 的内容就是 A 发过来的 request 内容了。
明白了么?
在客户端是 sent request
在服务端是 received request
都你说了,
在公众平台官网的开发-基本设置页面,勾选协议成为开发者,点击“修改配置”按钮,填写服务器地址( URL )、Token 和 EncodingAESKey,其中 URL 是开发者用来接收微信消息和事件的接口 URL
握手成功后。用户输入的文字信息会被微信服务器打包成一个 xml 文件 post 到你这人 URL 来。
<xml> <ToUserName>< ![CDATA[toUser] ]></ToUserName>
<FromUserName>< ![CDATA[fromUser] ]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType>< ![CDATA[text] ]></MsgType>
<Content>< ![CDATA[this is a test] ]></Content>
<MsgId>1234567890123456</MsgId>
</xml>
参数 描述
ToUserName 开发者微信号
FromUserName 发送方帐号(一个 OpenID )
CreateTime 消息创建时间 (整型)
MsgType text
Content 文本消息内容
MsgId 消息 id,64 位整型
你的程序要解析这个 xml 把 content 取出来,再发给你的机器人,把回复打成 xml 包 ToUser/FromUser 对调,response 回微信服务器,要在 5 秒钟以内完成。
你仔细看一下官方文档吧。
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140453
关注了公众号的用户输入的信息都会被微信公众号服务器 post 到这个 url 来,用 token 握手验证只在第一次.
数据库加密之类的也是间接加密。
明文要保证安全唯一办法就是,----物理隔离----,
也就是说放了密码的主机不能连网,同时禁用任何外接存储,禁止任何非授权的人进入机房。
要查询要在主机本地终端操作。不然谈安全都是扯淡。
首先来说,你这个做法应该不是目的。
在数据库中无论你如何随机去生成另一个表,每行记录最终都会是有一个相对固定的自然存储顺序。
一些重要的概念你要知道,random ()函数产生的伪随机数是不可以用于生产环境的抽奖之类的应用的。
如果需要获取随机样本的情况,对随机性能要求不高,性能也不需要太高时,不用改原表。
select * from table_name order by random() limit 5;
或者从调用程序中实现。如果连续 pk,使用 random.sample 之类的。不连续先要把 pk 取出一个表,再 random.sample。
pk 表可以维护在缓存里。
还是你学艺不精
import sys; print(sys.path)
一眼就看出来了
没太懂你这个需求,
前端向后端请求数据直接用 ajax 本身就是异步吧还用得着 celery ?
只有前端扔给后端一个异步任务比如生成一个文件,等生成好推消息给前端。让用户去下载。
这个用 celery 的 Task Singals 来写一段 callback 去实现呗。
建议用 postgres 9.5+版,已对 json 和 jsonb 支持相对比较完善了,至少没有其它数据库比得上。存取速度和 mongodb 不相上下,所以直接用 pg 吧。250G 对于 pg 来说只是毛毛雨。
>>> MM.objects.values_list('item').annotate(Count('item'))
<QuerySet [('c', 2), ('b', 6), ('a', 4), ('f', 1), ('e', 2), ('d', 1)]>
假设有这样一个只有一字段的 Model
class MyModel(models.Model):
□□□□item = models.CharField(max_length=100)
□□□□def __str__(self):s
□□□□□□□□return self.item
□□□□class Meta:
□□□□□□□□verbose_name = 'MM'
>>> from temp.models import MyModel as MM
MM.objects.values_list('item', flat=True)
<QuerySet ['a', 'b', 'c', 'd', 'e', 'a', 'a', 'e', 'b', 'b', 'b', 'b', 'f', 'a', 'c', 'b']>
>>> from django.db.models import Count
>>> MM.objects.values_list('item', flat=True).annotate(Count('item'))
<QuerySet ['c', 2, 'b', 6, 'a', 4, 'f', 1, 'e', 2, 'd', 1]>
>>> from collections import Counter
>>> Counter(MM.objects.values_list('item', flat=True))
Counter({'b': 6, 'a': 4, 'c': 2, 'e': 2, 'd': 1, 'f': 1})
配色方案这个东西主观性太强了,看个人喜好吧。
Sublime Text 3 的配色比较艳丽醒目,比较适合做 Demo 用,
如果写代码初用还好,眼睛盯时间长了更易疲劳,多少有点乱心。
反观原版 MonoKai 更清淡素雅,颜色对比没有那么强烈,长时间用眼睛相对比较舒适。
全是个人看法。
先把 SCIP 英文原版的学一遍,如果能把所有练习题都做出来,那么你就是干这行的料。
然后去学习 java,C++都行,最不济来个 Python 绝对没问题。
要是 SCIP 过不了,劝退。
大佬,公众号的后台也是用 python 开发的么?有没有技术资料分享,最好 github。谢谢