标签归档:Python3

Python怎样存储变量性能最优?这篇文章告诉你答案

工作时我们经常会遇到需要临时保存结果变量的场景,尤其是一些数据处理、模型开发的场景,加载处理速度是个很漫长的过程,于是经常会把这些变量储存起来。

而储存变量最常见、最普遍的方法是用pickle,保存为pkl文件。但是如果从写入和读取的性能角度考虑,pkl可能真的不是最优选。

Pickle有其独特的好处,大部分变量不需要进行处理,都能直接存到pkl文件里,但这样的方便其实是牺牲了部分性能取得的。与之相比,numpy的.npy格式就比pickle性能上快不少。

当然,我们需要有证据支撑这个观点。所以今天我们就来做个实验,分别在Python2和Python3中对比 numpy 和 pickle 两种存储格式(.npy, .pkl) 对数据的存储和读取的性能对比。

部分内容参考分析自: https://applenob.github.io/python/save/

1. Python2中, npy与pkl的性能对比

首先初始化数据:

import numpy as np
import time
import cPickle as pkl
import os

all_batches = []
for i in range(20):
    a1 = np.random.normal(size=[25600, 40])
    label = np.random.normal(size=[25600, 1])
    all_batch = np.concatenate([a1, label], 1)
    all_batches.append(all_batch)
all_batches = np.array(all_batches)
print(all_batches.shape)
# (20, 25600, 41)

然后测试使用pickle保存和读取时间的耗时,以及整个文件的大小:

s_t1 = time.time()
pkl_name = "a.pkl"
with open(pkl_name, "wb") as f:
    pkl.dump(all_batches, f)
pkl_in_time = time.time() - s_t1
print("pkl dump costs {} sec".format(pkl_in_time))

s_t2 = time.time()
with open(pkl_name, "rb") as f:
    new_a = pkl.load(f)
pkl_out_time = time.time() - s_t2
print("pkl load costs {} sec".format(pkl_out_time))

pkl_size = os.path.getsize(pkl_name)
print("pkl file size: {} byte, {} mb".format(pkl_size, float(pkl_size)/(1024*1024)))

结果如下:

pkl dump costs 67.7483091354 sec
pkl load costs 52.1168899536 sec
pkl file size: 497437110 byte, 474.392995834 mb

然后再试一下npy的写入和读取:

s_t3 = time.time()
npy_name = "a.npy"
with open(npy_name, "wb") as f:
    np.save(f, arr=all_batches)
npy_in_time = time.time() - s_t3
print("npy save costs {} sec".format(npy_in_time))
s_t4 = time.time()
with open(npy_name, "rb") as f:
    new_a = np.load(f)
npy_out_time = time.time() - s_t4
print("npy load costs {} sec".format(npy_out_time))
npy_size = os.path.getsize(npy_name)
print("npy file size: {} byte, {} mb".format(npy_size, float(npy_size) / (1024 * 1024)))

结果如下:

npy save costs 20.718367815 sec
npy load costs 0.62314915657 sec
npy file size: 167936128 byte, 160.15637207 mb

结果发现,npy性能明显优于pkl格式。

通过多次测试发现,在Python2中,npy格式的性能优势全面碾压pkl,工程允许的情况下,在Python2中,我们应该在这二者中毫不犹豫地选择npy.

2.Python3中, npy与pkl的性能对比

Python2已经是过去式,重点还要看Python3.

在Python3中,与Python2的代码唯一一句不一样的是pickle的引入:

# Python2:
import cPickle as pkl

# Python3:
import pickle as pkl

其他代码基本一样,替换代码后,重新运行程序,让我们看看在Python3上,npy格式和pkl格式性能上的区别:

首先是pkl格式的表现:

ckenddeMacBook-Pro:Documents ckend$ python 1.py 
(20, 25600, 41)
pkl dump costs 24.32167887687683 sec
pkl load costs 4.480823040008545 sec
pkl file size: 167936163 byte, 160.15640544891357 mb

然后是npy格式的表现:

npy save costs 22.471696853637695 sec
npy load costs 0.3791017532348633 sec
npy file size: 167936080 byte, 160.1563262939453 mb

可以看到在Python3中pkl格式和npy格式的存储大小是基本相同的,在存储耗时上也相差无几。但是在读取数据的时候,npy相对于pkl还是有一定的优势的。

因此,如果你的程序非常注重读取效率,那么我觉得npy格式会比pkl格式更适合你。

我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

给作者打赏,选择打赏金额
¥1¥5¥10¥20¥50¥100¥200 自定义

​Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典

Chalice-面向AWS的Python无服务器微框架

Chalice是一个用python编写无服务器应用程序的框架。它允许您快速创建和部署使用AWS Lambda的应用程序。它提供:

  • 用于创建、部署和管理应用程序的命令行工具
  • 基于修饰器的API,用于与Amazon API Gateway、Amazon S3、Amazon SNS、Amazon SQS和其他AWS服务集成
  • 自动生成IAM策略

您可以创建睡觉接口:

from chalice import Chalice

app = Chalice(app_name="helloworld")

@app.route("/")
def index():
    return {"hello": "world"}

定期运行的任务:

from chalice import Chalice, Rate

app = Chalice(app_name="helloworld")

# Automatically runs every 5 minutes
@app.schedule(Rate(5, unit=Rate.MINUTES))
def periodic_task(event):
    return {"hello": "world"}

您可以将lambda函数连接到S3事件:

from chalice import Chalice

app = Chalice(app_name="helloworld")

# Whenever an object is uploaded to 'mybucket'
# this lambda function will be invoked.

@app.on_s3_event(bucket='mybucket')
def handler(event):
    print("Object uploaded for bucket: %s, key: %s"
          % (event.bucket, event.key))

以及SQS队列:

from chalice import Chalice

app = Chalice(app_name="helloworld")

# Invoke this lambda function whenever a message
# is sent to the ``my-queue-name`` SQS queue.

@app.on_sqs_message(queue='my-queue-name')
def handler(event):
    for record in event:
        print("Message body: %s" % record.body)

以及其他几个AWS资源

一旦您编写了代码,您只需运行chalice deployChalice负责部署您的应用程序

$ chalice deploy
...
https://endpoint/dev

$ curl https://endpoint/api
{"hello": "world"}

在不到30秒的时间内启动并运行。试一试这个项目,并在Github上与我们分享您的反馈

文档是可用的here

快速入门

在本教程中,您将使用chalice用于创建和部署基本睡觉应用编程接口的命令行实用程序。此快速入门使用Python3.7,但AWS Chalice支持AWS Lambda支持的所有版本的Python,包括python2.7、python3.6、python3.7、python3.8。我们建议您使用Python3的版本。您可以在Python download page

要安装Chalice,我们将首先在python3.7中创建并激活一个虚拟环境:

$ python3 --version
Python 3.7.3
$ python3 -m venv venv37
$ . venv37/bin/activate

接下来,我们将使用以下命令安装圣杯pip

$ python3 -m pip install chalice

您可以通过运行以下命令来验证您是否安装了圣杯:

$ chalice --help
Usage: chalice [OPTIONS] COMMAND [ARGS]...
...

凭据

在部署应用程序之前,请确保已配置凭据。如果您之前已将计算机配置为运行boto3(AWS SDK For Python)或AWS CLI,则可以跳过此部分

如果这是您第一次为AWS配置凭据,您可以按照以下步骤快速入门:

$ mkdir ~/.aws
$ cat >> ~/.aws/config
[default]
aws_access_key_id=YOUR_ACCESS_KEY_HERE
aws_secret_access_key=YOUR_SECRET_ACCESS_KEY
region=YOUR_REGION (such as us-west-2, us-west-1, etc)

如果需要有关所有支持的凭据配置方法的详细信息,请参阅boto3 docs

创建您的项目

接下来我们要做的是使用chalice用于创建新项目的命令:

$ chalice new-project helloworld

这将创建一个helloworld目录。cd放入此目录。您将看到已为您创建了几个文件:

$ cd helloworld
$ ls -la
drwxr-xr-x   .chalice
-rw-r--r--   app.py
-rw-r--r--   requirements.txt

您可以忽略.chalice目录,我们现在要关注的两个主要文件是app.pyrequirements.txt

我们来看一下app.py文件:

from chalice import Chalice

app = Chalice(app_name='helloworld')


@app.route('/')
def index():
    return {'hello': 'world'}

这个new-project命令创建了定义单个视图的示例应用程序,/,调用时将返回JSON正文{"hello": "world"}

正在部署

让我们部署此应用程序。一定要确保你在helloworld目录并运行chalice deploy

$ chalice deploy
Creating deployment package.
Creating IAM role: helloworld-dev
Creating lambda function: helloworld-dev
Creating Rest API
Resources deployed:
  - Lambda ARN: arn:aws:lambda:us-west-2:12345:function:helloworld-dev
  - Rest API URL: https://abcd.execute-api.us-west-2.amazonaws.com/api/

现在,您已经使用API Gateway和Lambda启动并运行了API:

$ curl https://qxea58oupc.execute-api.us-west-2.amazonaws.com/api/
{"hello": "world"}

尝试从中更改返回的词典index()功能。然后,您可以通过运行以下命令重新部署更改chalice deploy

下一步

现在,您已经使用以下工具创建了您的第一个应用程序chalice您可以修改您的app.py文件并重新运行chalice deploy要重新部署更改,请执行以下操作

此时,您可以采取以下几个步骤

  • Tutorials-从多个指导性教程中进行选择,这些教程将为您提供Chalice各种功能的分步示例
  • Topics-深入研究圣杯特定领域的文档。其中包含比教程更详细的文档
  • API Reference-有关Chalice公共API的所有类和方法的低级参考文档

如果您已经完成了对Chalice的实验,并且您想要进行清理,您可以使用chalice delete命令,则Chalice将删除它在运行chalice deploy命令

$ chalice delete
Deleting Rest API: abcd4kwyl4
Deleting function aws:arn:lambda:region:123456789:helloworld-dev
Deleting IAM Role helloworld-dev

反馈

我们也很想听到你的消息。请为您想要查看的其他功能创建任何Github问题,请访问https://github.com/aws/chalice/issues您也可以在GITER上与我们聊天:https://gitter.im/awslabs/chalice

Pwntools-CTF框架和开发开发库

pwntools-CTF工具包

Pwntools是一个CTF框架和开发开发库。它是用Python编写的,专为快速原型和开发而设计,旨在使利用代码尽可能简单

from pwn import *
context(arch = 'i386', os = 'linux')

r = remote('exploitme.example.com', 31337)
# EXPLOIT CODE GOES HERE
r.send(asm(shellcraft.sh()))
r.interactive()

文档

我们的文档位于docs.pwntools.com

还提供了一系列教程available online

为了帮助您入门,我们为过去的CTF挑战提供了一些示例解决方案,在我们的write-ups repository

安装

Pwntools最受64位Ubuntu LTS版本(14.04、16.04、18.04和20.04)的支持。大多数功能应该适用于任何类似POSIX的发行版(Debian、Arch、FreeBSD、OSX等)

建议使用Python3,但Pwntools仍然适用于Python2.7。pwntools的大部分功能都是自包含的,并且只支持Python。您应该能够快速使用

apt-get update
apt-get install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade pwntools

但是,某些特性(组装/反汇编外来体系结构)需要非Python依赖项。有关更多信息,请参阅complete installation instructions here

贡献

看见CONTRIBUTING.md

联系方式和社区

如果您有任何不值得回答的问题bug report,加入不一致服务器,地址为https://discord.gg/96VA2zvjCB

Learn-python-按主题拆分的Python脚本集合,包含带有说明的代码示例

学习Python的操场和小抄

这是按以下方式拆分的Python脚本的集合topics并包含代码示例,其中包含解释、不同的用例和指向更多阅读资料的链接

阅读这篇文章Português

这是一个操场因为您可以更改或添加代码以查看它是如何工作的,并且test it out使用断言。它还允许您lint the code您已经编写并检查它是否符合Python代码样式指南。总之,它可能会使您的学习过程更具交互性,并且可能会帮助您从一开始就保持相当高的代码质量

这是一个小抄因为一旦您想要重述的语法,您可能会返回到这些代码示例standard Python statements and constructions另外,因为代码充满了断言,所以您将能够立即看到预期的函数/语句输出,而无需启动它们

您可能还会对以下内容感兴趣🤖Interactive Machine Learning Experiments

如何使用此存储库

此存储库中的每个Python脚本都具有以下结构:

"""Lists  <--- Name of the topic here

# @see: https://www.learnpython.org/en/Lists  <-- Link to further readings goes here

Here might go more detailed explanation of the current topic (i.e. general info about Lists).
"""


def test_list_type():
    """Explanation of sub-topic goes here.
    
    Each file contains test functions that illustrate sub-topics (i.e. lists type, lists methods).
    """
    
    # Here is an example of how to build a list.  <-- Comments here explain the action
    squares = [1, 4, 9, 16, 25]
    
    # Lists can be indexed and sliced. 
    # Indexing returns the item.
    assert squares[0] == 1  # <-- Assertions here illustrate the result.
    # Slicing returns a new list.
    assert squares[-3:] == [9, 16, 25]  # <-- Assertions here illustrate the result.

因此,通常您可能需要执行以下操作:

  • Find the topic你想学习还是复习
  • 阅读每个脚本的文档字符串中链接的注释和/或文档(如上例所示)
  • 查看代码示例和断言以查看用法示例和预期输出
  • 更改代码或添加新断言以查看工作原理
  • Run testslint the code以查看它是否正常工作并且写入是否正确

目录

  1. 快速入门
  2. 操作员
  3. 数据类型
  4. 控制流
  5. 功能
  6. 班级
  7. 模块
  8. 错误和异常
  9. 文件
  10. 添加内容
  11. 标准图书馆简介

必备条件

安装Python

确保你有Python3 installed在您的机器上

您可能想要使用venv创建虚拟环境的标准Python库,并从本地项目目录安装和提供Python、pip和所有从属软件包,以避免扰乱系统范围的软件包及其版本

根据您的安装,您可能可以通过运行以下命令来访问Python3解释器pythonpython3对于pip包管理器也是如此-可以通过运行以下命令来访问它pippip3

您可以通过运行以下命令检查您的Python版本:

python --version

请注意,在此存储库中,每当您看到python假设它是Python3个

安装依赖项

通过运行以下命令安装项目所需的所有依赖项:

pip install -r requirements.txt

测试代码

测试使用以下工具进行pytest框架

通过使用添加文件和函数,您可以为自己添加新的测试test_前缀(即test_topic.py使用def test_sub_topic()内部函数)

要运行所有测试,请从项目根文件夹执行以下命令:

pytest

要运行特定测试,请执行:

pytest ./path/to/the/test_file.py

链接代码

Linting是使用pylintflake8图书馆

PyLint

检查代码是否针对PEP 8样式指南请运行:

pylint ./src/

在Linter将检测到错误的情况下(即missing-docstring)您可能希望通过运行以下命令来阅读有关特定错误的更多信息:

pylint --help-msg=missing-docstring

More about PyLint

Flake8

检查代码是否针对PEP 8样式指南请运行:

flake8 ./src

或者,如果您希望获得更详细的输出,可以运行以下命令:

flake8 ./src --statistics --show-source --count

More about Flake8

支持该项目

您可以通过以下方式支持此项目❤️️GitHub或❤️️Patreon

Hug 使API开发尽可能简单


Hug的目标是使开发Python驱动的API尽可能简单,但并不简单。因此,它极大地简化了Python API开发

Hug的设计目标:

  • 使开发Python驱动的API与书面定义一样简洁
  • 框架应该鼓励编写自我文档代码
  • 它应该是快的。出于性能原因,开发人员永远不会觉得有必要寻找其他地方。
  • 为在Hug之上编写的API编写测试应该是简单而直观的
  • 在API框架中只做一次比将问题集推给API框架的用户要好
  • 成为下一代Python API的基础,采用最新技术

作为这些目标的结果,Hug仅支持Python3+,并且是在此基础上构建的Falcon’s高性能HTTP库

支持拥抱发展

Get professionally supported hug with the Tidelift Subscription

拥抱的专业支持是作为Tidelift
Subscription
Tidelift为软件开发团队提供了购买和维护软件的单一来源,并由最了解该技术的专家提供专业级别保证,同时与现有工具无缝集成

安装拥抱

安装Hug非常简单,只需:

pip3 install hug --upgrade

理想情况下,在virtual environment

快速入门

只需几行代码即可使用简单端点构建示例API

# filename: happy_birthday.py
"""A basic (single function) API written using hug"""
import hug


@hug.get('/happy_birthday')
def happy_birthday(name, age:hug.types.number=1):
    """Says happy birthday to a user"""
    return "Happy {age} Birthday {name}!".format(**locals())

要运行,请在命令行中键入:

hug -f happy_birthday.py

您可以在浏览器中访问该示例,网址为:localhost:8000/happy_birthday?name=hug&age=1然后在以下位置查看您的API的文档localhost:8000/documentation

参数也可以在URL中编码(签出happy_birthday.py对于整个示例)

@hug.get('/greet/{event}')
def greet(event: str):
    """Greets appropriately (from http://blog.ketchum.com/how-to-write-10-common-holiday-greetings/)  """
    greetings = "Happy"
    if event == "Christmas":
        greetings = "Merry"
    if event == "Kwanzaa":
        greetings = "Joyous"
    if event == "wishes":
        greetings = "Warm"

    return "{greetings} {event}!".format(**locals())

一旦您按照上述方式运行服务器,您就可以通过以下方式使用它:

curl http://localhost:8000/greet/wishes
"Warm wishes!"

拥抱着版本化

# filename: versioning_example.py
"""A simple example of a hug API call with versioning"""
import hug

@hug.get('/echo', versions=1)
def echo(text):
    return text


@hug.get('/echo', versions=range(2, 5))
def echo(text):
    return "Echo: {text}".format(**locals())

要运行示例,请执行以下操作:

hug -f versioning_example.py

然后,您可以从以下位置访问该示例localhost:8000/v1/echo?text=Hi/localhost:8000/v2/echo?text=Hi或从以下地址访问您的API的文档localhost:8000

注意:Hug中的版本控制自动支持版本头和直接基于URL的规范

Hug接口测试

拥抱的http方法装饰器不会修改您的原始函数。这使得测试Hug API与测试任何其他Python函数一样简单。此外,这意味着与其他Python代码中的API函数交互与仅调用Python API函数一样简单。Hug使测试API的完整Python堆栈变得容易,方法是使用hug.test模块:

import hug
import happy_birthday

hug.test.get(happy_birthday, 'happy_birthday', {'name': 'Timothy', 'age': 25}) # Returns a Response object

你可以用这个Response测试断言的对象(签出test_happy_birthday.py):

def tests_happy_birthday():
    response = hug.test.get(happy_birthday, 'happy_birthday', {'name': 'Timothy', 'age': 25})
    assert response.status == HTTP_200
    assert response.data is not None

与其他基于WSGI的服务器运行Hug

拥抱暴露出一种__hug_wsgi__自动在每个API模块上使用魔法方法。在任何标准的WSGI服务器上运行基于Hug的API都应该很简单,只需将其指向module_name__hug_wsgi__

例如:

uwsgi --http 0.0.0.0:8000 --wsgi-file examples/hello_world.py --callable __hug_wsgi__

要运行hello world hug示例API,请执行以下操作

Hug API的构建块

在使用Hug框架构建API时,您将使用以下概念:

方法装饰器getpostupdate等HTTP方法修饰器,在保持Python方法不变的同时将Python函数公开为API

@hug.get() # <- Is the hug METHOD decorator
def hello_world():
    return "Hello"

Hug使用您修饰的函数结构自动为API用户生成文档。Hug始终将请求、响应和API_VERSION变量传递给函数(如果它们是在函数定义中定义的参数

类型批注可选地附加到方法参数的函数,用于指定如何验证参数并将其转换为Python类型

@hug.get()
def math(number_1:int, number_2:int): #The :int after both arguments is the Type Annotation
    return number_1 + number_2

类型批注还会馈送到hug的自动文档生成,让API用户知道要提供什么数据

指令与请求/响应数据一起执行的函数,这些函数基于在API_Function中作为参数被请求。这些仅作为输入参数应用,当前不能作为输出格式或转换应用

@hug.get()
def test_time(hug_timer):
    return {'time_taken': float(hug_timer)}

指令可以通过带有hug_前缀,或使用Python3类型批注。后者是更现代的方法,建议使用。模块中声明的指令可以通过使用它们的完全限定名作为类型注释来访问(例如:module.directive_name)

除了明显的输入转换用例之外,还可以使用指令将数据输送到API函数中,即使它们没有出现在请求查询字符串、POST正文等中。有关如何以这种方式使用指令的示例,请参阅Examples文件夹中的身份验证示例

添加您自己的指令非常简单:

@hug.directive()
def square(value=1, **kwargs):
    '''Returns passed in parameter multiplied by itself'''
    return value * value

@hug.get()
@hug.local()
def tester(value: square=10):
    return value

tester() == 100

为完整起见,下面是通过魔术名称方法访问指令的示例:

@hug.directive()
def multiply(value=1, **kwargs):
    '''Returns passed in parameter multiplied by itself'''
    return value * value

@hug.get()
@hug.local()
def tester(hug_multiply=10):
    return hug_multiply

tester() == 100

输出表单事项获取API函数的输出并对其进行格式化以便传输给API用户的函数

@hug.default_output_format()
def my_output_formatter(data):
    return "STRING:{0}".format(data)

@hug.get(output=hug.output_format.json)
def hello():
    return {'hello': 'world'}

如图所示,您可以轻松地更改整个API和单个API调用的输出格式

输入表事项一个函数,它从API的用户处获取数据体,并对其进行格式化以进行处理

@hug.default_input_format("application/json")
def my_input_formatter(data):
    return ('Results', hug.input_format.json(data))

输入格式化程序基于content_type请求数据,并且仅执行基本解析。更详细的解析应该由您的api_function

中间件Hug API处理的每个请求都会调用的函数

@hug.request_middleware()
def process_data(request, response):
    request.env['SERVER_NAME'] = 'changed'

@hug.response_middleware()
def process_data(request, response, resource):
    response.set_header('MyHeader', 'Value')

您还可以使用以下工具轻松添加任何Falcon样式的中间件:

__hug__.http.add_middleware(MiddlewareObject())

参数映射可用于覆盖推断的参数名称,例如。对于保留关键字:

import marshmallow.fields as fields
...

@hug.get('/foo', map_params={'from': 'from_date'})  # API call uses 'from'
def get_foo_by_date(from_date: fields.DateTime()):
    return find_foo(from_date)

输入格式化程序基于content_type请求数据,并且仅执行基本解析。更详细的解析应该由您的api_function

多文件拆分API

Hug使您能够以任何您认为合适的方式组织大型项目。您可以导入任何包含Hug修饰函数(请求处理、指令、类型处理程序等)的模块,并使用该模块扩展您的基础API

例如:

something.py

import hug

@hug.get('/')
def say_hi():
    return 'hello from something'

可以导入到主API文件中:

__init__.py

import hug
from . import something

@hug.get('/')
def say_hi():
    return "Hi from root"

@hug.extend_api('/something')
def something_api():
    return [something]

或者,对于这样的情况,每个URL路由只包含一个模块:

#alternatively
hug.API(__name__).extend(something, '/something')

配置拥抱404

默认情况下,当用户尝试访问未定义的端点时,Hug返回自动生成的API规范。如果您不想退还此规范,可以关闭404文档:

从命令行应用程序执行以下操作:

hug -nd -f {file} #nd flag tells hug not to generate documentation on 404

此外,您还可以轻松创建自定义404处理程序,方法是使用hug.not_found装饰师:

@hug.not_found()
def not_found_handler():
    return "Not Found"

此修饰器的工作方式与Hug HTTP方法修饰器相同,甚至可以识别版本:

@hug.not_found(versions=1)
def not_found_handler():
    return ""

@hug.not_found(versions=2)
def not_found_handler():
    return "Not Found"

Asyncio支持

在使用getcli协程上的方法修饰器,Hug将调度协程的执行

使用异步协同程序装饰器

@hug.get()
@asyncio.coroutine
def hello_world():
    return "Hello"

使用Python 3.5异步关键字

@hug.get()
async def hello_world():
    return "Hello"

注意:Hug在顶部的Falcon上运行,它不是异步服务器。即使使用Asyncio,仍将同步处理请求

使用Docker

如果您希望在Docker中进行开发并保持系统整洁,您可以这样做,但您需要首先安装Docker Compose

一旦你这样做了,你就需要cd进入到docker目录并运行中指定的Web服务器(Gunicorn./docker/gunicorn/Dockerfile之后,您可以在主机上的浏览器中预览API的输出

$ cd ./docker
# This will run Gunicorn on port 8000 of the Docker container.
$ docker-compose up gunicorn

# From the host machine, find your Dockers IP address.
# For Windows & Mac:
$ docker-machine ip default

# For Linux:
$ ifconfig docker0 | grep 'inet' | cut -d: -f2 | awk '{ print $1}' | head -n1

默认情况下,IP为172.17.0.1。假设这也是您看到的IP,那么您将转到http://172.17.0.1:8000/在您的浏览器中查看您的API

您还可以登录到可以考虑您的工作空间的Docker容器。此工作区安装了Python和Pip,因此您可以在Docker中使用这些工具。例如,如果您需要测试CLI接口,您可以使用以下代码

$ docker-compose run workspace bash

在你的码头上workspace容器中的./docker/templates主计算机上的目录挂载到/src在码头集装箱里。这是在下指定的services>app./docker/docker-compose.yml

bash-4.3# cd /src
bash-4.3# tree
.
├── __init__.py
└── handlers
    ├── birthday.py
    └── hello.py

1 directory, 3 files

安全联系信息

Hug认真对待安全和质量。这就是为什么我们只依赖经过彻底测试的组件并利用静电分析工具(如Banddit和SAFE)来验证我们代码库的安全性的原因。如果您发现或遇到任何潜在的安全问题,请立即通知我们,以便我们解决

若要报告安全漏洞,请使用Tidelift security contactTidelift将协调修复和披露

为什么要拥抱?

拥抱只是希望有用的向导的意思。这代表了该项目的目标,即帮助指导开发人员创建编写良好且直观的API


谢谢,我希望你能找到拥抱对您开发下一个Python API很有帮助!

~蒂莫西·克罗斯利

Isort-用于对import进行排序的Python实用程序/库

isort 是一个Python的实用程序/库,它会按字母顺序对导入(import)的库进行排序,并自动分组。它提供多种实用方式,包括命令行、Python库和VSCode、Pycharm插件快速分拣你所有的import。

它基于Python 3.6+实现,但也支持格式化Python 2代码

在isort之前:

from my_lib import Object
import os
from my_lib import Object3
from my_lib import Object2
import sys
from third_party import lib15, lib1, lib2, lib3, lib4, lib5, lib6, lib7, lib8, lib9, lib10, lib11, lib12, lib13, lib14
import sys
from __future__ import absolute_import
from third_party import lib3
print("Hey")
print("yo")

排序后:

from __future__ import absolute_import import os
import sys from third_party import (lib1, lib2, lib3, lib4, lib5, lib6, lib7, lib8,
                        lib9, lib10, lib11, lib12, lib13, lib14, lib15)

from my_lib import Object, Object2, Object3 
print("Hey")
print("yo")

安装isort

安装isort非常简单,只需:

pip install isort

安装isort,并提供Requirements.txt支持:

pip install isort[requirements_deprecated_finder]

安装支持管道文件的isort:

pip install isort[pipfile_deprecated_finder]

安装支持两种格式的isort:

pip install isort[requirements_deprecated_finder,pipfile_deprecated_finder]

使用isort

从命令行

要在特定文件上运行,请执行以下操作:

isort mypythonfile.py mypythonfile2.py

要递归应用,请执行以下操作:

isort .

如果globstar已启用,isort .相当于:

isort **/*.py

要查看建议的更改而不应用它们,请执行以下操作:

isort mypythonfile.py --diff

最后,要对项目自动运行isort,仅在未引入语法错误的情况下应用更改:

isort --atomic .

(注意:这在默认情况下是禁用的,因为它阻止isort针对使用不同版本的Python编写的代码运行。)

从Python内部

import isort
isort.file(“pythonfile.py”)

或者:

import isort
sorted_code = isort.code(“import b\nimport a\n)

为您首选的文本编辑器安装isort

已经编写了几个插件,可以在各种文本编辑器中使用isort。您可以找到它们的完整列表on the isort
wiki
此外,我将热情地接受包括其他文本编辑器插件的Pull请求,并在收到通知时为它们添加文档

多行输出模式

您将注意到上面的“MULTI_LINE_OUTPUT”设置。此设置定义当从导入扩展到超过line_length限制并具有12 possible settings

压痕

要更改常量缩进的显示方式-只需使用以下可接受的格式更改缩进属性:

  • 您想要的空间数。例如:4将导致标准的4空格缩进
  • 选项卡
  • 带引号的逐字字符串

例如:

"    "

等于4

对于使用圆括号的导入样式,可以控制是否在上次导入后使用include_trailing_comma选项(默认为False)

智能平衡多行导入

从isort3.1.0开始,添加了对平衡多行导入的支持。启用此功能后,isort会将导入长度动态更改为生成最平衡格网的长度,同时保持在定义的最大导入长度以下

示例:

from __future__ import (absolute_import, division,
                        print_function, unicode_literals)

将会产生,而不是:

from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

要启用此设置,请执行以下操作balanced_wrappingTrue在您的配置中,或将-e选项添加到命令行实用程序中

自定义节和排序

isort提供了配置选项来更改导入在各个部分中的组织、排序或分组方式的几乎每一个方面

Click here有关所有这些选项的概述,请参阅

跳过导入处理(配置之外)

要使isort忽略单个导入,只需在包含文本的导入行末尾添加注释isort:skip

import module  # isort:skip

或者:

from xyz import (abc,  # isort:skip
                 yo,
                 hey)

要使isort跳过整个文件,只需添加isort:skip_file添加到模块的文档字符串:

""" my_module.py
    Best module ever

   isort:skip_file
"""

import b
import a

从多个文件添加或删除导入

可以运行isort或将其配置为自动添加/删除导入

See a complete guide here.

使用isort验证代码

这个--check-only选项

也可以使用isort来验证代码的格式是否正确,方法是使用-c任何包含错误排序和/或格式化导入的文件都将输出到stderr

isort **/*.py -c -v

SUCCESS: /home/timothy/Projects/Open_Source/isort/isort_kate_plugin.py Everything Looks Good!
ERROR: /home/timothy/Projects/Open_Source/isort/isort/isort.py Imports are incorrectly sorted.

可以使用它的一个很好的地方是使用预先提交的git钩子,比如@acdha提供的这个钩子:

https://gist.github.com/acdha/8717683

这有助于在整个项目中确保一定级别的代码质量

Git钩子

isort提供了一个钩子函数,该函数可以集成到Git预提交脚本中,以便在提交之前检查Python代码

More info here.

Setuptools集成

安装后,isort将启用setuptools用于检查项目声明的Python文件的命令

More info here.

把消息传出去

将此徽章放在存储库的顶部,让其他人知道您的项目使用了isort

对于Readme.md:

[![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/)

或readme.rst:

.. image:: https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336
    :target: https://pycqa.github.io/isort/

安全联系信息

若要报告安全漏洞,请使用Tidelift security
contact
Tidelift将协调修复和披露

为什么是伊索尔?

isort简单地表示导入排序。它最初名为“sortImports”,但是我厌倦了键入额外的字符,并意识到CamelCase并不是巨蟒

我之所以编写isort,是因为在我曾经工作过的一个组织中,经理有一天来了,他决定所有代码都必须按字母顺序对导入进行排序。代码库很大–他的意思是让我们手工完成。然而,作为一名程序员-我太懒了,不会花8个小时盲目地执行一个函数,但也不会太懒,不会花16个小时让它自动化。我获得了开放源码sortImports的许可,我们在这里:)


Get professionally supported isort with the Tidelift
Subscription

对isort的专业支持是作为Tidelift
Subscription
Tidelift为软件开发团队提供了购买和维护软件的单一来源,并由最了解该技术的专家提供专业级别保证,同时与现有工具无缝集成


谢谢,我希望你觉得isort有用!

~蒂莫西·克罗斯利

WeiboSpider-新浪微博爬虫,用Python爬取新浪微博数据

本程序可以连续爬取一个多个新浪微博用户(如胡歌迪丽热巴郭碧婷)的数据,并将结果信息写入文件数据库那就是。写入信息几乎包括用户微博的所有数据,包括用户信息微博信息两大类.因为内容太多,这里不再赘述,详细内容见获取到的字段那就是。如果只需要用户信息,可以通过设置实现只爬取微博用户信息的功能.本程序需设置Cookie来获取微博访问权限,后面会讲解如何获取cookie那就是。如果不想设置Cookie,可以使用免cookie版、二者功能类似.

爬取结果可写入文件和数据库,具体的写入文件类型如下:

  • TXT文件(默认)
  • csv文件(默认)
  • JSON文件(可选)
  • mysql数据库(可选)
  • mongodb数据库(可选)
  • SQLite数据库(可选)

同时支持下载微博中的图片和视频,具体的可下载文件如下:

  • 原创微博中的原始图片(可选)
  • 转发微博中的原始图片(可选)
  • 原创微博中的视频(可选)
  • 转发微博中的视频(可选)
  • 原创微博现场照片中的视频(免cookie版(特有)
  • 转发微博现场照片中的视频(免cookie版(特有)

内容列表

[TOC]

获取到的字段

本部分为爬取到的字段信息说明,为了与免cookie版区分,下面将两者爬取到的信息都列出来.如果是免Cookie版所特有的信息,会有免Cookie标注,没有标注的为二者共有的信息。

用户信息

  • 用户id:微博用户id,如“1669879400”,其实这个字段本来就是已知字段
  • 昵称:用户昵称,如“亲爱的-迪丽热巴”
  • 性别:微博用户性别
  • 生日:用户出生日期
  • 所在地:用户所在地
  • 学习经历:用户上学时学校的名字和时间
  • 工作经历:用户所属公司名字和时间
  • 阳光信用(免Cookie版):用户的阳光信用
  • 微博注册时间(免Cookie版):用户微博注册日期
  • (微博数:用户的全部微博数(转发微博+原创微博)
  • 关注数:用户关注的微博数量
  • 粉丝数:用户的粉丝数
  • 简介:用户简介
  • 主页地址(免Cookie版):微博移动版主页URL
  • 头像URL(免Cookie版):用户头像URL
  • 高清头像URL(免Cookie版):用户高清头像URL
  • 微博等级(免Cookie版):用户微博等级
  • 会员等级(免Cookie版):微博会员用户等级,普通用户该等级为%0
  • 是否认证(免Cookie版):用户是否认证,为布尔类型
  • 认证类型(免Cookie版):用户认证类型,如个人认证、企业认证、政府认证等
  • 认证信息:为认证用户特有,用户信息栏显示的认证信息

微博信息

  • 微博id:微博唯一标志
  • 微博内容:微博正文
  • 头条文章URL:微博中头条文章的URL,若微博中不存在头条文章,则值为‘’
  • 原始图片URL:原创微博图片和转发微博转发理由中图片的URL,若某条微博存在多张图片,每个URL以英文逗号分隔,若没有图片则值为“无”
  • 视频URL:微博中的视频URL,若微博中没有视频,则值为“无”
  • 微博发布位置:位置微博中的发布位置
  • 微博发布时间:微博发布时的时间,精确到分
  • 点赞数:微博被赞的数量
  • 转发数:微博被转发的数量
  • 评论数:微博被评论的数量
  • 微博发布工具:微博的发布工具,如iphone客户端、华为Mate 20专业版等
  • 结果文件:保存在当前目录微博文件夹下以用户昵称为名的文件夹里,名字为“user_id.csv”和“user_id.txt”的形式
  • 微博图片:原创微博中的图片和转发微博转发理由中的图片,保存在以用户昵称为名的文件夹下的img文件夹里
  • 微博视频:原创微博中的视频,保存在以用户昵称为名的文件夹下的视频文件夹里
  • 微博BID(免Cookie版):为免cookie版所特有,与本程序中的微博id是同一个值
  • 话题(免Cookie版):微博话题,即两个#中的内容,若存在多个话题,每个URL以英文逗号分隔,若没有则值为‘’
  • @用户(免Cookie版):微博@的用户,若存在多个@用户,每个url以英文逗号分隔,若没有则值为‘’
  • 原始微博(免Cookie版):为转发微博所特有,是转发微博中那条被转发的微博,存储为字典形式,包含了上述微博信息中的所有内容,如微博id、微博内容等等

示例

如果想要知道程序的具体运行结果,可以查看示例文档,该文档介绍了爬取迪丽热巴微博的例子,并附有部分结果文件截图.

运行环境

  • 开发语言:Python2/Python3
  • 系统:Windows/LINUX/MacOS

使用说明

0。版本

本程序有两个版本,你现在看到的是python3版,另一个是python2版,python2版位于python2分支那就是。目前主力开发python3版,包括新功能开发和bug修复;python2版仅支持bug修复。推荐python3用户使用当前版本,推荐python2用户使用python2版、本使用说明是python3版的使用说明.

1.安装程序

本程序提供两种安装方式,一种是源码安装,另一种是PiP安装、二者功能完全相同.如果你需要修改源码,建议使用第一种方式,否则选哪种安装方式都可以.

源码安装

$ git clone https://github.com/dataabc/weiboSpider.git
$ cd weiboSpider
$ pip install -r requirements.txt

PiP安装

$ python3 -m pip install weibo-spider

2.程序设置

要了解程序设置,请查看程序设置文档那就是。

3.运行程序

源码安装的用户可以在WeiboSpider目录运行如下命令PiP安装的用户可以在任意有写权限的目录运行如下命令

$ python3 -m weibo_spider

第一次执行,会自动在当前目录创建配置.json配置文件,配置好后执行同样的命令就可以获取微博了。

如果你已经有config.json文件了,也可以通过CONFIG_PATH参数配置config.json路径,运行程序,命令行如下:

$ python3 -m weibo_spider --config_path="config.json"

如果你想指定文件(csv、txt、json、图片、视频)保存路径,可以通过输出目录参数设定.假如你想把文件保存到/主页/微博/目录,可以运行如下命令:

$ python3 -m weibo_spider --output_dir="/home/weibo/"

如果你想通过命令行输入user_id,可以使用参数u,可以输入一个或多个user_id,每个user_id以英文逗号分开,如果这些user_id中有重复的user_id,程序会自动去重。命令行如下:

$ python3 -m weibo_spider --u="1669879400,1223178222"

程序会获取User_id分别为1669879400和1223178222的微博用户的微博,后面会讲如何获取user_id那就是。该方式的所有User_id使用config.json中的Self_Date和End_Date设置,通过修改它们的值可以控制爬取的时间范围。若config.json中的User_id_List是文件路径,每个命令行中的User_id都会自动保存到该文件内,且自动更新Self_Date;若不是路径,User_id会保存在当前目录的User_id_List.txt内,且自动更新Self_Date,若当前目录下不存在User_id_List.txt,程序会自动创建它。

(个性化定制程序(可选)

本部分为可选部分,如果不需要个性化定制程序或添加新功能,可以忽略此部分.

本程序主体代码位于weibo_Spider.py文件,程序主体是一个蜘蛛类,上述所有功能都是通过在Main函数调用蜘蛛类实现的,默认的调用代码如下:

        config = get_config()
        wb = Spider(config)
        wb.start()  # 爬取微博信息

用户可以按照自己的需求调用或修改蜘蛛类.通过执行本程序,我们可以得到很多信息.

点击查看详情
  • wb.user[‘昵称’]:用户昵称;
  • wb.user[‘性别’]:用户性别;
  • wb.user[‘Location’]:用户所在地;
  • wb.user[‘生日’]:用户出生日期;
  • wb.user[‘Description’]:用户简介;
  • wb.user[‘VERIFIED_REASON’]:用户认证;
  • wb.user[‘Talent’]:用户标签;
  • wb.user[‘教育’]:用户学习经历;
  • wb.user[‘Work’]:用户工作经历;
  • wb.user[‘webo_num’]:微博数;
  • wb.user[‘Follow’]:关注数;
  • wb.user[‘Followers’]:粉丝数;

wb.weibo:除不包含上述信息外,wb.weibo包含爬取到的所有微博信息,如微博ID微博正文原始图片URL发布位置发布时间发布工具点赞数转发数评论数等.如果爬的是全部微博(原创+转发),除上述信息之外,还包含被转发微博原始图片URL是否为原创微博等.Wb.weibo是一个列表,包含了爬取的所有微博信息.wb.weibo[0]为爬取的第一条微博,wb.weibo[1]为爬取的第二条微博,以此类推.当过滤=1时,wb.weibo[0]为爬取的第一条原创微博,以此类推.wb.weibo[0][‘id’]为第一条微博的id,wb.weibo[0][‘Content’]为第一条微博的正文,wb.weibo[0][‘Publish_Time’]为第一条微博的发布时间,还有其它很多信息不在赘述,大家可以点击下面的“详情”查看具体用法。

详情

若目标微博用户存在微博,则:

  • ID:存储微博id。如wb.weibo[0][‘id’]为最新一条微博的id;
  • 内容:存储微博正文。内容wb.weibo[0][‘如’]为最新一条微博的正文;
  • 文章URL:存储微博中头条文章的URL。文章wb.weibo[0][‘如_url’]为最新一条微博的头条文章url,若微博中不存在头条文章,则值为‘’;
  • 原始图片:存储原创微博的原始图片URL和转发微博转发理由中的图片URL。如wb.weibo[0][‘Original_Pictures’]为最新一条微博的原始图片url,若该条微博有多张图片,则存储多个url,以英文逗号分割;若该微博没有图片,则值为“无”;
  • 转发图片:存储被转发微博中的原始图片URL。当最新微博为原创微博或者为没有图片的转发微博时,则值为“无”,否则为被转发微博的图片URL。若有多张图片,则存储多个URL,以英文逗号分割;
  • PUBLISH_PLACE:存储微博的发布位置。如wb.weibo[0][‘PUBLISH_PLACE’]为最新一条微博的发布位置,如果该条微博没有位置信息,则值为“无”;
  • PUBLISH_TIME:存储微博的发布时间。如wb.weibo[0][‘PUBLISH_TIME’]为最新一条微博的发布时间;
  • up_num:存储微博获得的点赞数。如wb.weibo[0][‘up_num’]为最新一条微博获得的点赞数;
  • 转发号:存储微博获得的转发数。转发wb.weibo[0][‘如_num’]为最新一条微博获得的转发数;
  • COMMENT_NUM:存储微博获得的评论数。评论wb.weibo[0][‘如_num’]为最新一条微博获得的评论数;
  • 发布工具:存储微博的发布工具。如wb.weibo[0][‘Publish_Tool’]为最新一条微博的发布工具。

(定期自动爬取微博(可选)

要想让程序每个一段时间自动爬取,且爬取的内容为新增加的内容(不包括已经获取的微博),请查看定期自动爬取微博那就是。

如何获取Cookie

要了解获取Cookie方法,请查看cookie文档那就是。

用户ID(如何获取_id)

要了解获取用户id方法,请查看user_id文档、该文档介绍了如何获取一个及多个微博用户用户id的方法。

常见问题

如果运行程序的过程中出现错误,可以查看常见问题页面,里面包含了最常见的问题及解决方法.如果出现的错误不在常见问题里,您可以通过发issue寻求帮助,我们会很乐意为您解答.

学术研究

本项目通过获取微博数据,为写论文、做研究等非商业项目提供所需数据.学术研究文档是一些在论文或研究等方面使用过本程序的项目,这些项目展示已征得所有者同意.在一些涉及隐私的描述上,已与所有者做了沟通,描述中只介绍所有者允许展示的部分.如果部分信息所有者之前同意展示并且已经写在了文档中,现在又不想展示了,可以通过邮件(chillychen1991@gmail.com)或Issue的方式告诉我,我会删除相关信息。同时,也欢迎使用本项目写论文或做其它学术研究的朋友,将自己的研究成果展示在学术研究文档里,这完全是自愿的.

相关项目

  • weibo-crawler-功能和本项目完全一样,可以不添加Cookie,获取的微博属性更多;
  • weibo-search–可以连续获取一个或多个微博关键词搜索结果,并将结果写入文件(可选)、数据库(可选)等.所谓微博关键词搜索即:搜索正文中包含指定关键词的微博、可以指定搜索的时间范围.对于非常热门的关键词,一天的时间范围,可以获得1,000万以上的搜索结果,N天的时间范围就可以获得1000万X N搜索结果。对于大多数关键词,一天产生的相应微博数量应该在1,000万条以下,因此可以说该程序可以获得大部分关键词的全部或近似全部的搜索结果。而且该程序可以获得搜索结果的所有信息,本程序获得的微博信息该程序都能获得.

贡献

欢迎为本项目贡献力量.贡献可以是提交代码,可以是通过Issue提建议(如新功能、改进方案等),也可以是通过Issue告知我们项目存在哪些Bug、缺点等,具体贡献方式见为本项目做贡献那就是。

贡献者

感谢所有为本项目贡献力量的朋友,贡献者详情见贡献者页面.

注意事项

  1. 不能为爬虫微博的用户id用户id。因为要爬微博信息,必须先登录到某个微博账号,此账号我们姑且称为爬虫微博.爬虫微博访问自己的页面和访问其他用户的页面,得到的网页格式不同,所以无法爬取自己的微博信息;如果想要爬取爬虫微博内容,可以参考获取自身微博信息
  2. 曲奇有期限限制,大约三个月。若提示Cookie错误或已过期,需要重新更新Cookie。

Python-spider-🌈Python3网络爬虫实战:淘宝、京东、网易云、B站、12306、抖音、笔趣阁、漫画小说下载、音乐电影下载等

目录

爬虫小工具

  • downloader.py:文件下载小助手

    一个可以用于下载图片、视频、文件的小工具,有下载进度显示功能.稍加修改即可添加到自己的爬虫中.

    动态示意图:

爬虫实战

  • py:“笔趣看”盗版小说网站,爬取小说工具

    第三方依赖库安装:

     pip3 install beautifulsoup4
    

    使用方法:

     python biqukan.py
    
  • baduwenku.py:百度文库Word文章爬取

    原理说明:http://blog.csdn.net/c406495762/article/details/72331737

    代码不完善,没有进行打包,不具通用性,纯属娱乐.

  • Shuaia.py:爬取“帅啊”网,帅哥图片

    “帅啊”网网址:http://www.shuaia.net/index.html

    原理说明:http://blog.csdn.net/c406495762/article/details/72597755

    第三方依赖库安装:

     pip3 install requests beautifulsoup4
    
  • daili.py:构建代理IP池

    原理说明:http://blog.csdn.net/c406495762/article/details/72793480

  • 纸箱:使用Scrapy爬取“火影忍者”漫画

    代码可以爬取整个“火影忍者”漫画所有章节的内容,保存到本地.更改地址,可以爬取其他漫画.保存地址可以在settings.py中修改。

    动漫网站:http://comic.kukudm.com/

    原理说明:http://blog.csdn.net/c406495762/article/details/72858983

  • py:“王者荣耀”推荐出装查询小助手

    网页爬取已经会了,想过爬取手机应用程序里的内容吗?

    原理说明:http://blog.csdn.net/c406495762/article/details/76850843

  • financical.py:财务报表下载小助手

    爬取的数据存入数据库会吗?“跟股神巴菲特学习炒股之财务报表入库(Mysql)”也许能给你一些思路。

    原理说明:http://blog.csdn.net/c406495762/article/details/77801899

    动态示意图:

  • One_Hour_Spider:一小时入门Python3网络爬虫。

    原理说明:

    本次实战内容有:

    • 路透纽约8月23日电-毕曲坎(网络小说下载(静态网站:行情)
    • (优美壁纸下载(动态网站:行情)-不溅起
    • 视频下载
  • py:抖音应用视频下载

    抖音应用程序的视频下载,就是普通的应用程序爬取。

    原理说明:

  • 抖音_PRO:抖音应用视频下载(升级版)

    抖音应用程序的视频下载,添加视频解析网站,支持无水印视频下载,使用第三方平台解析。

    原理说明:

  • 抖音:抖音应用视频下载(升级版2)

    抖音应用程序的视频下载,添加视频解析网站,支持无水印视频下载,通过URL解析,无需第三方平台。

    原理说明:

    动态示意图:

  • py:geetest验证码识别

    原理说明:

  • 12306.py:用Python抢火车票简单代码

    可以自己慢慢丰富,蛮简单,有爬虫基础很好操作,没有原理说明.

  • 白湾:百万英雄辅助答题

    效果图:

    原理说明:

    功能介绍:

    服务器端,使用python(bai wan.py)通过抓包获得的接口获取答题数据,解析之后通过百度知道搜索接口匹配答案,将最终匹配的结果写入文件(file.txt)。

    手机抓包不会的朋友,可以看下我的早期手机APP抓包教程那就是。

    js(app.js)每隔1S读取一次文件.txt文件,并将读取结果通过套接字.IO推送给客户端(index.html)。

    亲测答题延时在3S左右。

    声明:没做过后端和前端,花了一天时间,现学现卖弄好的、javascript也是现看现用,百度的程序,调试调试而已。可能有很多用法比较Low的地方,用法不对,请勿见怪,有大牛感兴趣,可以自行完善。

  • 网易:根据歌单下载网易云音乐

    效果图:

    原理说明:

    暂无

    功能介绍:

    根据MUSIC_LIST.txt文件里的歌单的信息下载网易云音乐,将自己喜欢的音乐进行批量下载。

  • Bilibili:B站视频和弹幕批量下载

    原理说明:

    暂无

    使用说明:

     python bilibili.py -d 猫 -k 猫 -p 10
    
     三个参数:
     -d	保存视频的文件夹名
     -k	B站搜索的关键字
     -p	下载搜索结果前多少页
    
  • 京东:京东商品晒单图下载

    效果图:

    原理说明:

    暂无

    使用说明:

     python jd.py -k 芒果
    
      三个参数:
     -d	保存图片的路径,默认为fd.py文件所在文件夹
     -k	搜索关键词
     -n  	下载商品的晒单图个数,即n个商店的晒单图
    
  • 正方_系统_蜘蛛:对正方教务管理系统个人课表,个人学生成绩,绩点等简单爬取

    效果图:

    原理说明:

    暂无

    使用说明:

     cd zhengfang_system_spider
     pip install -r requirements.txt
     python spider.py
    

其它

  • 欢迎拉取请求,感谢贡献。

更多精彩,敬请期待!

Zulip-Zulip服务器和web应用-功能强大的开源团队聊天

Zulip概述

Zulip是一款功能强大的开源群聊应用程序,它结合了实时聊天的即时性和线程化对话的生产力优势。Zulip被开源项目、财富500强公司、大型标准机构和其他需要实时聊天系统的人使用,该系统允许用户每天轻松处理数百或数千条消息。每月有700多名贡献者合并500多条提交,Zulip也是规模最大、增长最快的开源群聊项目

快速入门

单击下面的相应链接。如果什么都不适用,请加入我们的Zulip community server告诉我们怎么回事!

您可能会对以下内容感兴趣:

您可能还会有兴趣阅读我们的blog或者跟着我们走TwitterZulip分布在Apache 2.0许可证

Celery-分布式任务队列(开发分支)

版本: 5.1.2(太阳谐波)
网站: https://docs.celeryproject.org/en/stable/index.html
下载: https://pypi.org/project/celery/
来源: https://github.com/celery/celery/
关键词: 任务、队列、作业、异步、rabbitmq、amqp、redis、python、分布式、参与者

捐款

这项工程有赖于你的慷慨捐助。

如果您正在使用celery创建商业产品,请考虑成为我们的backer或者我们的sponsor确保celery的未来

对于企业而言

作为Tidelift订阅的一部分提供

的维护人员celery数以千计的其他软件包正在与Tidelift合作,为您用来构建应用程序的开源依赖项提供商业支持和维护。节省时间、降低风险并提高代码的健全性,同时付钱给您使用的确切依赖项的维护人员。Learn more.

什么是任务队列?

任务队列用作跨线程或计算机分配工作的机制

任务队列的输入是一个工作单元,称为任务,专用的工作进程然后不断地监视队列以查找要执行的新工作

celery通过消息进行通信,通常使用经纪人在客户和工人之间进行调解。为了启动任务,客户端将消息放到队列中,然后代理将消息传递给工作器

celery系统可以由多个工作进程和代理组成,为高可用性和水平扩展让路。

celery是用Python编写的,但是协议可以用任何语言实现。除了Python,还有node-celery对于Node.js,一个PHP clientgocelery对于戈朗,还有rusty-celery对于生锈

语言互操作性也可以通过使用WebHook来实现,其方式是客户端将工作人员请求的URL入队

我需要什么?

celery5.1.2版运行在

  • Python(3.6、3.7、3.8、3.9)
  • Pypy3.6(7.6)

这是下一版本的celery,将支持Python 3.6或更高版本

如果您运行的是较旧版本的Python,则需要运行较旧版本的celery:

  • Python 2.6:celery系列3.1或更早版本
  • Python 2.5:celery系列3.0或更早版本
  • Python 2.4:celery系列2.2或更早版本
  • Python 2.7:celery4.x系列

celery是一个资金最少的项目,所以我们不支持Microsoft Windows。请不要打开任何与该平台相关的问题

celery通常与message broker一起使用来发送和接收消息。RabbitMQ、Redis传输功能齐全,但也有对无数其他解决方案的实验支持,包括使用SQLite进行本地开发

celery可以在单台计算机、多台计算机甚至跨数据中心运行

开始使用

如果这是您第一次尝试使用celery,或者您是以前版本的celery5.0.5或5.1.2的新手,那么您应该阅读我们的入门教程:

您还可以通过使用托管代理传输CloudAMQP开始使用celery。RabbitMQ最大的主机提供商是celery的骄傲赞助商

celery是

  • 简单

    celery很容易使用和维护,而且确实不需要配置文件

    它有一个活跃、友好的社区,您可以与之交谈以寻求支持,例如在我们的mailing-list,或IRC通道

    下面是您可以制作的最简单的应用程序之一:

    from celery import Celery
    
    app = Celery('hello', broker='amqp://guest@localhost//')
    
    @app.task
    def hello():
        return 'hello world'
  • 高可用性

    在连接丢失或故障的情况下,工作人员和客户端将自动重试,一些代理通过以下方式支持HA主要/主要主/复制副本复制

  • 快地

    单个celery进程一分钟可以处理数百万个任务,往返延迟为亚毫秒级(使用RabbitMQ、py-librabbitmq和优化设置)

  • 灵活性

    几乎每一个地方celery可以自己扩展或使用,定制池实现、序列化程序、压缩方案、日志记录、调度程序、使用者、生产者、代理传输等等

它支持

  • 消息传输
  • 并发性
  • 结果商店
    • AMQP,Redis
    • memcached
    • SQL炼金术,Django ORM
    • Apache Cassandra、IronCache、Elasticsearch
  • 序列化
    • 泡菜JSONYAML消息包
    • zlibbzip2压缩
    • 加密消息签名

框架集成

celery很容易与web框架集成,其中一些框架甚至有集成包:

Django 不需要
Pyramid pyramid_celery
Pylons celery-pylons
Flask 不需要
web2py web2py-celery
Tornado tornado-celery

集成包并不是严格必需的,但是它们可以简化开发,有时它们还会添加重要的挂钩,比如在以下位置关闭数据库连接fork

文档

这个latest documentation托管在Read the Docs上,包含用户指南、教程和API参考

最新的中文文档托管在https://www.celerycn.io/中,包含用户指南、教程、接口接口等。

安装

您可以通过Python包索引(PyPI)或从源代码安装celery

要使用安装,请执行以下操作pip

$ pip install -U Celery

捆绑包

celery还定义了一组可用于安装celery的捆绑包以及给定功能的依赖项

您可以在需求中或在pip命令行中使用方括号。可以通过逗号分隔多个捆绑包来指定它们

$ pip install "celery[librabbitmq]"

$ pip install "celery[librabbitmq,redis,auth,msgpack]"

以下捆绑包可用:

序列化程序

celery[auth] 用于使用auth安全序列化程序
celery[msgpack] 用于使用msgpack序列化程序
celery[yaml] 用于使用YAML序列化程序

并发性

celery[eventlet] 用于使用eventlet游泳池
celery[gevent] 用于使用gevent游泳池

传输和后端

celery[librabbitmq] 用于使用librabbitmq C库
celery[redis] 将Redis用作消息传输或作为结果的后端
celery[sqs] 使用Amazon SQS作为消息传输
celery[tblib]: 用于使用task_remote_tracebacks功能
celery[memcache] 用于将memcached用作结果后端(使用pylibmc)
celery[pymemcache] 用于将memcached用作结果后端(纯Python实现)
celery[cassandra] 用于将Apache Cassandra用作DataStAX驱动程序的结果后端
celery[azureblockblob] 使用Azure Storage作为结果后端(使用azure-storage)
celery[s3] 使用S3存储作为结果后端
celery[couchbase] 将Couchbase用作结果后端
celery[arangodb] 使用ArangoDB作为结果后端
celery[elasticsearch] 用于将Elasticsearch用作结果后端
celery[riak] 使用Riak作为结果后端
celery[cosmosdbsql] 使用Azure Cosmos DB作为结果后端(使用pydocumentdb)
celery[zookeeper] 用于将ZooKeeper用作消息传输
celery[sqlalchemy] 使用SQLAlChemy作为结果后端(支持)
celery[pyro] 为了使用Pyro4消息传输(实验性的)
celery[slmq] 为了使用SoftLayer消息队列传输(实验性的)
celery[consul] 用于将Consul.io密钥/值存储用作消息传输或结果后端(实验性的)
celery[django] 指定Django支持的可能最低版本

您可能不应该在您的需求中使用它,它在这里仅供参考

从源下载并安装

从PyPI下载最新版本的celery:

https://pypi.org/project/celery/

您可以通过执行以下操作来安装它:

$ tar xvfz celery-0.0.0.tar.gz
$ cd celery-0.0.0
$ python setup.py build
# python setup.py install

如果您当前未使用虚拟环境,则必须以特权用户身份执行最后一个命令

使用开发版本

带管道

celery开发版本还需要kombuamqpbilliard,以及vine

您可以使用以下pip命令安装这些快照的最新版本:

$ pip install https://github.com/celery/celery/zipball/master#egg=celery
$ pip install https://github.com/celery/billiard/zipball/master#egg=billiard
$ pip install https://github.com/celery/py-amqp/zipball/master#egg=amqp
$ pip install https://github.com/celery/kombu/zipball/master#egg=kombu
$ pip install https://github.com/celery/vine/zipball/master#egg=vine

使用GIT

请参阅投稿部分

获取帮助

邮件列表

有关celery的用途、发展和未来的讨论,请加入celery-users邮件列表

IRC

来和我们在IRC上聊天吧。这个#celery频道位于Freenode网络

漏洞跟踪器

如果您有任何建议、错误报告或烦恼,请将它们报告给我们的问题跟踪器,地址为https://github.com/celery/celery/issues/

维基

https://github.com/celery/celery/wiki

学分

贡献者

这个项目的存在要归功于所有做出贡献的人。celery的开发发生在GitHub:https://github.com/celery/celery

我们非常鼓励您参与celery的开发。如果您不喜欢GitHub(出于某种原因),欢迎您发送常规补丁

请务必同时阅读Contributing to Celery部分,请参阅文档中的

支持者

感谢我们所有的支持者!🙏[Become a backer]

赞助商

通过成为赞助商来支持这个项目。您的徽标将在此处显示,并带有指向您的网站的链接。[Become a sponsor]


许可证

此软件在新的BSD许可证下获得许可。请参阅LICENSE完整许可证文本的顶级分发目录中的文件