我正在尝试使用Javascript EC6中的新Map对象,因为它已经在最新的Firefox和Chrome版本中得到支持.
但我发现它在"功能"编程中非常有限,因为它缺乏经典的地图,过滤器等方法,可以很好地配合一[key, value]
对.它有一个forEach但不返回回调结果.
如果我可以将它map.entries()
从MapIterator转换为一个简单的数组,那么我可以使用标准.map
,.filter
没有额外的黑客攻击.
将Javascript迭代器转换为数组是否有"好"的方法?在python中它就像做一样简单list(iterator)
...但是Array(m.entries())
返回一个以Iterator为第一个元素的数组!
编辑
我忘了指定我正在寻找一个适用于地图工作的答案,这意味着至少Chrome和Firefox(Array.from在Chrome中不起作用).
PS.
我正在测试使用memcached来缓存django视图.如何判断memcached是否实际缓存了Linux命令行中的任何内容?
我使用redis作为django缓存的内存数据库后端.
特别是,我使用django-redis配置如下:
CACHES = {
'default': {
'BACKEND': 'redis_cache.cache.RedisCache',
'KEY_PREFIX': DOMAIN_NAME,
'LOCATION': 'unix:/tmp/redis_6379.sock:1',
'OPTIONS': {
'PICKLE_VERSION': -1, # default
'PARSER_CLASS': 'redis.connection.HiredisParser',
'CLIENT_CLASS': 'redis_cache.client.DefaultClient',
},
},
}
Run Code Online (Sandbox Code Playgroud)
我的django缓存似乎工作正常.
奇怪的是我无法使用redis-cli
命令行看到django缓存键.
[编辑] 请注意以下我试过两个
$ redis-cli
Run Code Online (Sandbox Code Playgroud)
和
$ redis-cli -s /tmp/redis_6379.sock
Run Code Online (Sandbox Code Playgroud)
[EndEdit中]
没有区别.
特别是,使用KEYS *
命令:
$ redis-cli
redis 127.0.0.1:6379> keys *
(empty list or set)
Run Code Online (Sandbox Code Playgroud)
但
redis 127.0.0.1:6379> set stefano test
OK
redis 127.0.0.1:6379> keys *
1) "stefano"
Run Code Online (Sandbox Code Playgroud)
而来自django shell:
In [1]: from django.core.cache import cache
In [2]: …
Run Code Online (Sandbox Code Playgroud) 我有一张很大的桌子.它目前在MySQL数据库中.我用django.
我需要迭代表中的每个元素来预先计算一些特定的数据(也许如果我更好,我可以做其他事情,但这不是重点).
我希望通过不断使用内存来尽可能快地保持迭代.
因为它已经明确地限制了*Large*Django QuerySet中的内存使用以及为什么要遍历大量Django QuerySet消耗大量内存?,对django中所有对象的简单迭代将终止机器,因为它将从数据库中检索所有对象.
首先,为了减少你的内存消耗,你应该确保DEBUG是假的(或者修补游标:关闭SQL日志记录,同时保持settings.DEBUG?)以确保django不存储connections
调试内容.
但即便如此,
for model in Model.objects.all()
Run Code Online (Sandbox Code Playgroud)
是不行的.
甚至没有稍微改进的形式:
for model in Model.objects.all().iterator()
Run Code Online (Sandbox Code Playgroud)
使用iterator()
将通过不在内部存储缓存的结果来节省一些内存(虽然不一定在PostgreSQL上!); 但显然仍会从数据库中检索整个对象.
第一个问题的解决方案是基于计数器对结果进行切片chunk_size
.有几种方法可以编写它,但基本上它们都归结为OFFSET + LIMIT
SQL中的查询.
就像是:
qs = Model.objects.all()
counter = 0
count = qs.count()
while counter < count:
for model in qs[counter:counter+count].iterator()
yield model
counter += chunk_size
Run Code Online (Sandbox Code Playgroud)
虽然这是内存效率(恒定的内存使用量成比例chunk_size
),但它在速度方面确实很差:随着OFFSET的增长,MySQL和PostgreSQL(以及可能是大多数数据库)都会开始窒息和放慢速度.
Thierry Schellenbach 在这篇文章中提供了一个更好的解决方案.它过滤PK,这比抵消更快(可能有多快取决于DB)
pk = 0 …
Run Code Online (Sandbox Code Playgroud) 使用gunicorn运行django应用程序有3种方法:
标准gunicorn
+ wsgi
(参考django doc)
gunicorn project.wsgi:application
使用gunicorn django集成(ref gunicorn doc和django doc):
python manage.py run_gunicorn
使用gunicorn_django
命令(ref gunicorn doc)
gunicorn_django [OPTIONS] [SETTINGS_PATH]
Django的文档建议使用1.,它甚至没有被列为Gunicorn文档的选项.
有没有最好的方法来运行带有gunicorn的django应用程序,这些不同的解决方案有哪些可预见的优点/缺点?
看一下gunicorn的代码看起来他们几乎都是这样做的:2.似乎是使用django的内部创建一个wsgi应用程序,而3.使用2.
如果是这样的话,我甚至不明白不仅仅使用"1"的原因是什么.所有的时间,特别是因为wsgi.py
自django 1.4 以来文件被自动处理; 如果这是真的可能只是建议文件改进...
此外,与django的gunicorn设置的最佳实践将是伟大的.使用1.,在wsgi文件中设置一些默认值并避免其他设置是否有意义?
gunicorn -c configfile
和配置文件将指向django_settings到djangowsgi.py
只用1.免责声明:我知道SO上有几个类似的问题.我想我读的大多数,如果不是全部,但没有找到我真实问题的答案(见后文).我也知道使用celery或其他异步队列系统是实现长时间运行任务的最佳方法 - 或者至少使用cron管理的脚本.还有关于进程和线程的mod_wsgi文档,但我不确定我是否正确.
问题是:
使用其中列出的解决方案涉及哪些确切的风险/问题?它们中的任何一个都适用于长时间运行的任务(好吧,即使芹菜更适合)?我的问题更多是关于理解wsgi和python/django的内部结构,而不是找到最好的整体解决方案.阻塞线程,不安全访问变量,僵尸处理等问题.
让我们说:
mod_wsgi conf:
WSGIDaemonProcess NAME user=www-data group=www-data threads=25
WSGIScriptAlias / /path/to/wsgi.py
WSGIProcessGroup %{ENV:VHOST}
Run Code Online (Sandbox Code Playgroud)
我认为这些是可用于启动单独进程(在广义上意味着)的选项,以便在快速返回对用户的响应的同时执行长时间运行的任务:
import os
if os.fork()==0:
long_process()
else:
return HttpResponse()
Run Code Online (Sandbox Code Playgroud)
import subprocess
p = subprocess.Popen([sys.executable, '/path/to/script.py'],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
Run Code Online (Sandbox Code Playgroud)
(脚本可能是manage.py命令)
import threading
t = threading.Thread(target=long_process,
args=args,
kwargs=kwargs)
t.setDaemon(True)
t.start()
return HttpResponse()
Run Code Online (Sandbox Code Playgroud)
NB.
由于Global Interpreter Lock,在CPython中只有一个线程可以同时执行Python代码(即使某些面向性能的库可能会克服此限制).如果您希望应用程序更好地使用多核计算机的计算资源,建议您使用多处理.但是,如果要同时运行多个I/O绑定任务,则线程仍然是一个合适的模型.
主线程将快速返回(httpresponse).产生的长线程是否会阻止wsgi为其他请求做其他事情?!
from multiprocessing import Process
p = Process(target=_bulk_action,args=(action,objs))
p.start()
return HttpResponse()
Run Code Online (Sandbox Code Playgroud)
这应该解决线程并发问题,不应该吗?
所以这些是我能想到的选择.什么会起作用,什么不起作用,为什么?
Netbeans在线结尾有这个wiki条目:http://wiki.netbeans.org/FaqEditorEOLs
但它并不是很有用.它只是说你不应该在不同的操作系统上开发,那就是......
然而,在我的情况下,我没有权力.我在Windows机器上,我正在处理的PHP应用程序需要以UNIX EOL结束.
似乎没有为新文件设置此选项的选项.谁能告诉我在哪里设置这个?
我想将表单的一部分看起来像电子表格.有几种形式,<table>
因此不可行(虽然我在打印语义表格数据时并不反对它,因为情况就是这样).
所以我试着直接使用CSS2.1布局和表单输入元素,例如.
<div class="table">
<form class="tbody">
<div class="tr">
<label class="td">Label</label>
<input class="td" name />
<input class="td" name />
</div>
</form>
</div>
Run Code Online (Sandbox Code Playgroud)
小提琴中的完整例子.
但看起来它对元素display:table-cell
不起作用<input>
!
如果您在Chrome"Computed Style"中签入,则显示将为"inline-element".
但我没有找到任何地方为什么不应该:
任何的想法?
这听起来所以比有一些更好的<div class="cell">
周围<input>
,然后具有盒模型玩得到它好看...
我把头发拉到这里是因为这对我不起作用,看起来应该是这样.
我正在使用Django-Piston开发API并拥有2个模型,Building和Building Area.
BuildingArea有一个ForeignKey to Building,因为建筑物中有多个区域.FK的'related_name'属性是'areas',因此我可以从给定的Building访问BuildingAreas.
问题是它在Admin中看起来都很好但是当我点击/api/building.json端点时,所有我得到的是Building对象,而没有JSON中包含的嵌套的BuildingArea对象.
我原本以为Django-Piston默认会遵循反向FK字段,或者我错过了什么?
handlers.py
class BuildingHandler(BaseHandler):
allowed_methods = ('GET',)
model = Building
def read(self, name=None):
return self.model.objects.all()
Run Code Online (Sandbox Code Playgroud)
models.py
class Building(models.Model):
address = models.CharField(max_length=255)
def __unicode__(self):
return self.address
class BuildingArea(models.Model):
display_name = models.CharField(max_length=30)
building = models.ForeignKey(Building, related_name='areas')
def __unicode__(self):
return self.display_name
Run Code Online (Sandbox Code Playgroud) 如何设置django-cms项目以支持多个网站?
官方文档中没有提到这一点,邮件列表中只有有限的信息,但标题是"用于管理内容的分层页面的Django应用程序,可能是多种语言和/或多个站点".并且通过Django Sites Framework已经内置了支持,并且在管理页面中可以与不同的站点相关联.
有关:
django ×7
asynchronous ×1
css ×1
database ×1
django-cache ×1
django-cms ×1
ecmascript-6 ×1
eol ×1
foreign-keys ×1
gunicorn ×1
javascript ×1
memcached ×1
mod-wsgi ×1
netbeans ×1
redis ×1
sql ×1