• 学习日记-2019529


    Flask脚本服务搭建、基于上下文环境的处理、Python从列表中随机抽取若干元素、Python中format格式化输出、Python多进程

    【来源】https://www.u3v3.com/

    学习日记 2019/5/29

    Flask脚本服务搭建

    flasky.py

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    import os
    from dotenv import load_dotenv

    dotenv_path = os.path.join(os.path.dirname(__file__), '.env')
    if os.path.exists(dotenv_path):
    load_dotenv(dotenv_path)

    COV = None
    if os.environ.get('FLASK_COVERAGE'):
    import coverage
    COV = coverage.coverage(branch=True, include='app/*')
    COV.start()

    import sys
    import click
    from flask_migrate import Migrate, upgrade
    from app import create_app, db
    from app.models import User, Follow, Role, Permission, Post, Comment

    app = create_app(os.getenv('FLASK_CONFIG') or 'default')
    migrate = Migrate(app, db)



    def ():
    return dict(db=db, User=User, Follow=Follow, Role=Role,
    Permission=Permission, Post=Post, Comment=Comment)


    @app.cli.command()
    @click.option('--coverage/--no-coverage', default=False,
    help='Run tests under code coverage.')
    def test(coverage):
    """Run the unit tests."""
    if coverage and not os.environ.get('FLASK_COVERAGE'):
    import subprocess
    os.environ['FLASK_COVERAGE'] = '1'
    sys.exit(subprocess.call(sys.argv))

    import unittest
    tests = unittest.TestLoader().discover('tests')
    unittest.TextTestRunner(verbosity=2).run(tests)
    if COV:
    COV.stop()
    COV.save()
    print('Coverage Summary:')
    COV.report()
    basedir = os.path.abspath(os.path.dirname(__file__))
    covdir = os.path.join(basedir, 'tmp/coverage')
    COV.html_report(directory=covdir)
    print('HTML version: file://%s/index.html' % covdir)
    COV.erase()


    @app.cli.command()
    @click.option('--length', default=25,
    help='Number of functions to include in the profiler report.')
    @click.option('--profile-dir', default=None,
    help='Directory where profiler data files are saved.')
    def profile(length, profile_dir):
    """Start the application under the code profiler."""
    from werkzeug.contrib.profiler import ProfilerMiddleware
    app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=[length],
    profile_dir=profile_dir)
    app.run()


    @app.cli.command()
    def deploy():
    """Run deployment tasks."""

    upgrade()

    # create or update user roles
    Role.insert_roles()

    # ensure all users are following themselves
    User.add_self_follows()

    if __name__ == '__main__':
    app.cli()

    运行文件

    python flasky.py

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    (microvenv) [root@iz2ze8rern8nx1sglo8ub1z microblog]# python flasky.py
    Usage: flasky.py [OPTIONS] COMMAND [ARGS]...

    Options:
    --help Show this message and exit.

    Commands:
    deploy Run deployment tasks.
    profile Start the application under the code...
    test Run the unit tests.#新添加的内容

    python flasky.py test

    1
    2
    3
    4
    5
    6
    7
    (microvenv) [root@iz2ze8rern8nx1sglo8ub1z microblog]# python flasky.py test
    te 大专栏  学习日记-2019529st_password_setter (test_user_model.UserModelTestCase) ... ok

    ----------------------------------------------------------------------
    Ran 1 test in 0.447s

    OK

    基于上下文环境的处理

    在 create_app内做Flask相关的初始化,将这部分资源处理置于独立的模块中, 使用的时候直接引入, 在模块第一次引入的时候就完成了资源的连接处理, 但总有一些还是需要运行前要执行的内容, 比如应用参数设置。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)

    bootstrap.init_app(app)
    mail.init_app(app)
    moment.init_app(app)
    db.init_app(app)
    login_manager.init_app(app)
    pagedown.init_app(app)

    if app.config['SSL_REDIRECT']:
    from flask_sslify import SSLify
    sslify = SSLify(app)

    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)

    from .auth import auth as auth_blueprint
    app.register_blueprint(auth_blueprint, url_prefix='/auth')

    from .api import api as api_blueprint
    app.register_blueprint(api_blueprint, url_prefix='/api/v1')

    return app

    Python从列表中随机抽取若干元素

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import random
    x = [283,238,46,57,82,976]
    random.choice(x)
    random.sample(x,3)
    #从某个范围内获取若干个
    random.sample(range(100000),30)
    #选取随机字符
    random.choice('abcdrfgsfffgr')
    #生成随机整数
    random.randint(100,200)
    #生成随机偶数
    random.randrange(0,99,2)
    #生成0-1随机浮点数
    random.random()

    Python中format格式化输出

    通过key名填充字符

    1
    print('My Name is {name},Age is {age}'.format(name=name,age=age))

    通过字典的方式作参数传递

    1
    2
    params = {'name':name,'age':age}
    print('My Name is {name},Age is {age}'.format(**params))

    将tuple作为可变参数传递特性

    1
    2
    params=('Tony',18)
    print('My Name is {0},Age is {1},And Your Age is {1}'.format(*params))

    字符对齐

    1
    2
    3
    print('{:>10},{:>10}'.format('tony',18))#左对齐
    #右对齐<
    #居中对齐^

    数字格式化

    1
    2
    3
    4
    5
    6
    7
    #十进制转
    #二进制
    print('{:b}'.format(x))
    #八进制
    print('{:o}'.format(x))
    #十六进制
    print('{:x}'.format(x))

    浮点数精度控制

    1
    2
    pi = 3.1415926
    print('{:.2f}'.format(pi))#保留两位小数3.14

    三层{}可以转义

    1
    print('{{{0:.2f}}}'.format(pi))#{3.14}

    Python多进程

    • 进程创建

    unix下使用fork方式创建子进程

    1
    2
    3
    4
    Process 24896 start ... 
    This is Father process,And Its child pid is 24897
    This is child process and my pid is 24897,my father process is 1
    #子进程fork的结果总是0,可以用来作为区分父子进程的标志

    变量在多进程之间并没有什么影响

    windows下实现多进程用到了multiprocessing

    pro = Process(target=pro_do,args=("test","dev"))

    pro.start()

    是否阻塞方式执行,如果有则阻塞,否则非阻塞

    pro.join()

    可以通过Pool进程池创建多个进程,可以指定启动的子进程数量

    • 进程间通信

    父进程可以指定子进程执行的方法及参数,达到父进程向子进程单项通信

    子进程可以通过Queue方式向父进程通信write_queueread_queue

    两个进程间的通信可以使用Pipe形式send_piperecv_pipe

  • 相关阅读:
    Linux 中国镜像
    VMWare 安装 Debian 9
    Linux 安装Docker compose 快速方法
    Nginx on Docker 配置
    Docker 中配置Nginx
    Nginx IPV4 问题
    VMWare中CentOS 7 配置 XShell连接
    在CentOS 7 中安装Docker
    Docker for Windows 和虚拟机VMWare共存方案
    Nginx 配置多个站点
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12046682.html
Copyright © 2020-2023  润新知