docker可以很方便的一键部署应用,非常的实用,学习一下,顺便看能不能作为OnlineJudge的编译容器。 概念 镜像Image: 说白了就是类似.iso文件 容器Container: 说白了就是把.iso安装在虚拟机里,成为一个虚拟主机 说白了,docker就是把做好的镜像,直接运行,变成得到临时的容器,容器通常都是一次性的,用完后自动销毁所有的数据。 sudo yum -y install docker # 安装sudo service docker start # 运行# 之后所有的操作,都必须是用管理员的权限运行的docker images # 查看已经下载的镜像docker ps -a # 查看容器docker restart [name or id] # 对于已经exit的容器,重启继续运行docker exec -it [name or id] /bin/sh # 对于正在运行的容器,进入shelldocker search xxxx # 搜索镜像docker pull xxxx # 下载镜像docker commit 5d8413f3d030 new_name
发表于 2017-08-25 13:05:30 | 条评论 | 阅读次数:142
grafana其实是一款web端的图形界面,主要是用来查看报表的。 influxdb是存储的数据库。 StatsClient是python的一款influxdb的客户端,用来往influxdb数据库中发数据。 利用StatsClient来写statsd类(之后再把这个类的代码放上来QAQ) 今天这个主要是记录如何配置grafana的图表,感觉这块网上资料比较少。 这个是效果图。 其实往里面输入点东西,之后就会显示数据库中所有的条数了 这样设置来检测访问量,time可以设置多长时间聚合成一个点,一定要设置fill,不然图可能不能正常的显示。 这样可以设置这一段时间内,的平均耗时,如果把mean改成max, 就能检测这段时间内的极端耗时了 这path这边还能设置路由路径,能精确到某一具体的网页
发表于 2017-08-16 20:22:38 | 条评论 | 阅读次数:254
思路 1.记ans = INF 2.从任意点,用prim做最大生成树,记录最后一次加入到生成树中的点记为s,以及最后一次加入到生成树中的边记为e,记录e的另一端为t。 3.把与s节点相连的所有边权值相加记录为sum,去与ans取最小值更新ans 4.把s和t节点合并,若s和t都对r节点有边,合并后新的节点则是对r有重边。 5.回到步骤2,继续,直到只剩下了1个节点为止。 证明 定理1:sum就是上述的s和t的最小割。 证明 设与s相连的边分别是e1,e2,...,ene_1, e_2,...,e_ne​1​​,e​2​​,...,e​n​​,这些边的另一端分别为p1,p2,...,pnp_1, p_2, ..., p_np​1​​,p​2​​,...,p​n​​ 我们拿第一条边来举例子: 由于已经做了最大生成树,所以p1p_1p​1​​到ttt一定是可以通过最大生成树上的边到达的。 那么,考虑sss经过e1e_1e​1​​到达ttt,这条路径我们现在要让它断开。 可以分成两种情况,第一种情况是断开e1e_1e​1​​,第二种情况是断开p1p_1p​1​​与ttt不通过sss时的其他所有路径。 由于
acm
发表于 2017-08-08 10:01:23 | 条评论 | 阅读次数:169
创建 # config.pySQLALCHEMY_DATABASE_URI = 'mysql://root:123456@127.0.0.1/mc-backend-test'# main.pyfrom flask.ext.sqlalchemy import SQLAlchemydb = SQLAlchemy(blog) # 从flask的app的config创建 model层 class MessageContent(db.Model): __tablename__ = 'message_content' # 对应表的名字 id = db.Column('id', db.Integer, primary_key=True) # 声明主键 user_id = db.Column('user_id', db.Integer, doc="用户id", default=0) group_id = db.Column('group_id', db.Integer, default=0, doc="属于哪一组的消息") created_at = db.Column('c
发表于 2017-07-18 20:38:21 | 条评论 | 阅读次数:397
感觉flask_cache的那个缓存并不是太好用,于是自己撸了一个缓存的装饰器,配合redis实现。 利用这个,就能用来再继续做,得到orm自动缓存的基类等等。 # -*- coding:utf8 -*-import picklefrom app_create import r, config# r是StrictRedisdef cache(id, timeout=config.CACHE_DEFAULT_TIME): def real_decorator(func): answer = None key = '%s%s' % (config.CACHE_PREFIX, id) if r.exists(key): try: answer = pickle.loads(r.get(key)) except: pass def wrapped(*args, **kwargs): if answer is not None:
发表于 2017-07-15 01:45:00 | 条评论 | 阅读次数:124
首先进入venv,然后直接用pip安装celery即可。 celery_server.py # coding: utf-8from celery import Celerymq = Celery('QwbCelery', broker='redis://localhost:6379/0', backend='redis://localhost:6379/0')mq = Celery('QwbCelery')mq.conf.update( CELERY_ACCEPT_CONTENT=['pickle'], CELERY_ENABLE_UTC=True, CELERY_RESULT_BACKEND='redis://localhost:6379/0', CELERYD_LOG_COLOR=False, BROKER_URL='redis://localhost:6379/0', CELERY_TIMEZONE='UTC',)mq.conf.update( CELERY_IMPORTS=[ 'tasks.task1', ]) IMPORTS中
发表于 2017-07-12 13:30:43 | 条评论 | 阅读次数:136
以前装系统的时候,就有点问题,一直没有解决,终于现在系统被我玩坏了,可以重新装啦~ 之前我分了系统盘和数据盘,我们这次装机的目的是把系统盘重装,然后数据盘依然使用以前的。 然后还发现以前系统的内存似乎太大了点,似乎用不了那么多,于是就预留了几十个G,到时候再挂载到需要的地方。 首先在官网下载最新版系统的iso,然后官网有制作启动U盘的工具,先把U盘做好。 做好后,重启电脑,按F2,在选择启动中,把USB对应的那个启动放到最前面,重启后就能开始装系统了 之后的话,把磁盘按下面图的方式挂载就好了 linux-swap为交换分区,通常为内存的大小 把数据盘挂载到/home 建立一个放系统内容的,挂载到/ 建立一个efi做引导,大小通常300MB,不需要设置挂载位置 建立一个分区,大小为500MB,挂载到/boot 然后就一直下一步直到安装完成就好啦~ 安装完后,记得先更新一波源和系统更新。 sudo apt-get update 之后右下角弹出设置,把系统更新一下。 然后再输入 timedatectl set-local-rtc true 然后再去设置时区,这样就解决了双系统时区不正常
发表于 2017-07-01 17:13:45 | 条评论 | 阅读次数:198
Copyright © 2017 - 2019 qwb's blog
blog.csustacm.com All Rights Reserved
Powered by qwb Contact me