假设我们有一个虚函数:
async def foo(arg):
result = await some_remote_call(arg)
return result.upper()
Run Code Online (Sandbox Code Playgroud)
有什么区别:
coros = []
for i in range(5):
coros.append(foo(i))
loop = get_event_loop()
loop.run_until_complete(wait(coros))
Run Code Online (Sandbox Code Playgroud)
和:
from asyncio import ensure_future
futures = []
for i in range(5):
futures.append(ensure_future(foo(i)))
loop = get_event_loop()
loop.run_until_complete(wait(futures))
Run Code Online (Sandbox Code Playgroud)
注意:该示例返回结果,但这不是问题的焦点.当返回值很重要时,请使用gather()
而不是wait()
.
无论回报价值如何,我都在寻求清晰度ensure_future()
.wait(coros)
并且wait(futures)
都运行协同程序,所以何时以及为什么要将协程包装进去ensure_future
?
基本上,使用Python 3.5运行一堆非阻塞操作的正确方法(tm)是async
什么?
如果我想批量通话,如果需要额外的积分?例如,我需要调用some_remote_call(...)
1000次,但我不想粉碎Web服务器/数据库/等1000个同时连接.这对于线程或进程池是可行的,但有没有办法做到这一点asyncio
?
我正在尝试做这样的事情:
class AboutView(TemplateView):
template_name = 'about.html'
def get_context_data(self, **kwargs):
context = super(AboutView, self).get_context_data(**kwargs)
context['dahl_books'] = Books.objects.filter(author="Dahl')
Run Code Online (Sandbox Code Playgroud)
当我尝试在我的模板中访问dahl_books时,如下所示:
{% for book in dahl_books %}
Run Code Online (Sandbox Code Playgroud)
dahl_books
在模板上下文中不可用,即使Books QuerySet返回非零数量的书籍.....我在模板中还是在做错了get_context_data
?
django django-templates django-views django-class-based-views
通常,什么标记和CSS会在响应式设计中创建一个基于百分比的高度的元素?如何使用Twitter Bootstrap构建2列(固定流体)布局?显示如何创建两个100%高度的列,但这会突破高度<100%.
具体来说,我有一个带有项目列表的侧边栏div,可能是短(空)或长(overflow: auto
).但是因为没有父元素具有固定的高度,height: 20%;
所以不起作用.如何在保持响应式设计的同时为侧边栏提供流畅的高度?
在与NumPy和dateutil斗争了几天后,我最近发现了令人惊叹的Pandas库.我一直在仔细阅读文档和源代码,但我无法弄清楚如何date_range()
在正确的断点处生成索引.
from datetime import date
import pandas as pd
start = date('2012-01-15')
end = date('2012-09-20')
# 'M' is month-end, instead I need same-day-of-month
date_range(start, end, freq='M')
Run Code Online (Sandbox Code Playgroud)
我想要的是:
2012-01-15
2012-02-15
2012-03-15
...
2012-09-15
Run Code Online (Sandbox Code Playgroud)
我得到了什么:
2012-01-31
2012-02-29
2012-03-31
...
2012-08-31
Run Code Online (Sandbox Code Playgroud)
我需要一个月大小的块来计算一个月中可变的天数.这可以使用dateutil.rrule:
rrule(freq=MONTHLY, dtstart=start, bymonthday=(start.day, -1), bysetpos=1)
Run Code Online (Sandbox Code Playgroud)
丑陋和难以辨认,但它的工作原理.我怎么能和熊猫一起做这个?我打得既date_range()
和period_range()
,到目前为止,没有运气.
我的实际目标是使用groupby
,crosstab
和/或resample
计算的基础上,周期内各个条目的总和/单元/等各个周期值.换句话说,我想从以下数据转换数据:
total
2012-01-10 00:01 50
2012-01-15 01:01 55
2012-03-11 00:01 60
2012-04-28 00:01 80
#Hypothetical usage
dataframe.resample('total', how='sum', freq='M', start='2012-01-09', end='2012-04-15')
Run Code Online (Sandbox Code Playgroud)
至
total …
Run Code Online (Sandbox Code Playgroud) 我需要在Heroku上提供几个根级静态文件(例如domain.com/favicon.ico
).这是目前的文件列表:
favicon.ico
crossdomain.xml
sitemap.xml
robots.txt
humans.txt
apple-touch-icon-57x57-precomposed.png
apple-touch-icon-57x57.png
apple-touch-icon-72x72-precomposed.png
apple-touch-icon-72x72.png
apple-touch-icon-114x114-precomposed.png
apple-touch-icon-114x114.png
apple-touch-icon-precomposed.png
apple-touch-icon.png
Run Code Online (Sandbox Code Playgroud)
我搜索了高低,无法找到一个标准的方式来提供大量的静态文件.无论我在哪里托管它们(在带有collectstatic或Amazon S3的Heroku上),在我的urls.py中明确定义和重定向14个文件似乎都是错误的.
Socket.io建议设置每个套接字变量,如下所示:
socket.set('foo', bar, function () {});
也可以在套接字上设置和访问变量:
socket.foo = bar
使用提供的set()函数有什么好处?
我如何在开发中提供favicon.ico?我可以在我的urlconf中添加一个路由,但我不希望该路由转移到生产环境.有没有办法在local_settings.py中执行此操作?
我有一个基于Python 3.5+异步框架(apistar,sanic等)构建的Web应用程序.该应用程序进行各种IO调用 - 数据库,Redis等 - 也是异步的.
有些文档建议使用其他事件循环:
import asyncio
import peewee
from peewee_async import Manager, PostgresqlDatabase
loop = asyncio.new_event_loop() # Note: custom loop!
database = PostgresqlDatabase('test')
objects = Manager(database, loop=loop)
Run Code Online (Sandbox Code Playgroud)
我的理解是await
语句允许事件循环在上传IO时进行上下文切换,因此额外的事件循环似乎完全没必要.
使用额外的事件循环有什么好处,何时应该使用其他循环?
凯迪认为一切都很好:
{"level":"info","ts":...,"logger":"tls.issuance.acme.acme_client","msg":"validations succeeded; finalizing order","order":"https://acme-v02.api.letsencrypt.org/acme/order/.../..."}
{"level":"info","ts":...,"logger":"tls.issuance.acme.acme_client","msg":"successfully downloaded available certificate chains","count":2,"first_url":"https://acme-v02.api.letsencrypt.org/acme/cert/..."}
{"level":"info","ts":...,"logger":"tls.obtain","msg":"certificate obtained successfully","identifier":"service.internal.example.com"}
{"level":"info","ts":...,"logger":"tls.obtain","msg":"releasing lock","identifier":"service.internal.example.com"}
Run Code Online (Sandbox Code Playgroud)
Caddy 容器内部:
# curl https://localhost/ -H "Host: service.internal.example.com" -v
* Trying 127.0.0.1:443...
* Connected to localhost (127.0.0.1) port 443 (#0)
* ALPN: offers h2
* ALPN: offers http/1.1
* CAfile: /etc/ssl/certs/ca-certificates.crt
* CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS alert, internal error (592):
* error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error
* Closing connection 0
curl: (35) error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert …
Run Code Online (Sandbox Code Playgroud) 假设您在内存中有大量连续的整数,每个整数属于一个类别.两个操作必须是O(log n):将范围从一个类别移动到另一个类别,并查找给定范围的类别计数.
我很确定第二次操作是在第一次操作的正确实现的情况下解决的.
每个整数都从一个类别开始,所以我从一组平衡的BST开始.将子树从一个BST移动到另一个BST(例如,将范围移动到另一个类别)具有相当于合并两个BST的运行时间,即O(n1*n2)[ 1 ].
这太慢了(在python中,C不是一个选项),我无法找到一种方法来利用我的数据的固有结构来创建一个有效的BST合并操作.
我现在正在研究AVL,红黑和间隔树,二进制堆和treaps.比较他们的属性是压倒性的.我应该使用哪种结构?
编辑(问题澄清):我对如何存储这些值并创建数据结构很灵活.关于我如何接收来自其他应用程序的输入,我不灵活,如下所示:CATEGORY(cat3, I, J)
.我当前的解决方案创建了一个树,其中包含该范围中每个整数的节点.这对于我的数据集的大小来说太慢了,所以如果给出更好的方法,我很乐意重新设计.
任何给定的请求都可以将任何可能的整数范围移动到任何类别中.换句话说,范围在CATEGORY(cat1, 1, 10)
后面的意义上是重叠的CATEGORY(cat3, 5, 15)
,但是在任何给定时间每个整数将恰好属于一个类别的意义上是非重叠的.
python ×4
django ×3
favicon ×2
algorithm ×1
async-await ×1
caddy ×1
css ×1
curl ×1
datetime ×1
django-views ×1
event-loop ×1
heroku ×1
html5 ×1
javascript ×1
node.js ×1
pandas ×1
python-3.5 ×1
python-3.x ×1
socket.io ×1
ssl ×1
time-series ×1
tree ×1