可组合的Python执行器和future库
项目描述
more-executors
此库旨在与concurrent.futures
模块一起使用。它包括一系列Executor
实现,以便扩展Future
对象的行为。
特性
- 具有隐式重试的Future
- 具有在执行器关闭时隐式取消的Future
- 具有超时后隐式取消的Future
- 具有转换后的输出值(同步和异步)的Future
- 由调用者提供的轮询函数解决的Future
- 限制同时运行的未来数量
- 同步执行器
- 桥接
concurrent.futures
和asyncio
- 创建执行器的便利API
- 使用Prometheus进行仪表化
有关使用方法的详细信息,请参阅API文档。
示例
此示例结合了map和retry执行器,以创建并发运行HTTP请求的未来,并在未来中解码JSON响应并在出错时重试。
import requests
from concurrent.futures import as_completed
from more_executors import Executors
def get_json(response):
response.raise_for_status()
return (response.url, response.json())
def fetch_urls(urls):
# Configure an executor:
# - run up to 4 requests concurrently, in separate threads
# - run get_json on each response
# - retry up to several minutes on any errors
executor = Executors.\
thread_pool(max_workers=4).\
with_map(get_json).\
with_retry()
# Submit requests for each given URL
futures = [executor.submit(requests.get, url)
for url in urls]
# Futures API works as normal; we can block on the completed
# futures and map/retry happens implicitly
for future in as_completed(futures):
(url, data) = future.result()
do_something(url, data)
开发
可以使用virtualenv
和pip
从源代码本地安装此项目。
virtualenv ~/dev/python
. ~/dev/python/bin/activate
git clone https://github.com/rohanpm/more-executors
cd more-executors
pip install --editable .
可以使用pytest运行自动测试。
pip install -r test-requirements.txt
py.test
请通过https://github.com/rohanpm/more-executors提交拉取请求。
许可
本程序是免费软件:您可以在自由软件基金会发布的GNU通用公共许可证的条款下重新分发和/或修改它,许可证版本为3,或(根据您的选择)任何更高版本。
项目详情
关闭
more-executors-2.11.4.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f1b21d72c4c15069e891d9b96bca05f9abde149e3c11ca54630c5a1a5ee8f4b5 |
|
MD5 | 50bcdc8af7ef4791be633f32be0d098c |
|
BLAKE2b-256 | b1aab16e2197fcf2721e0840ebcd88c687fdf0446608260d6a6d1fcb3e175a8d |
关闭
more_executors-2.11.4-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a304139c6bece5be18aed7dcff4c48440412cb7cbe90f64ba4572772fcb0407f |
|
MD5 | 7fb3a6613ca7322e0cf16fa48c073ae2 |
|
BLAKE2b-256 | d4abd24c17cc6c68125d631a129bf7cc809460106bcce1959aa8a37453ca95d9 |