小编Ste*_*ano的帖子

将Javascript迭代器转换为数组

我正在尝试使用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.

我知道有很棒的wu.js,但它对traceur的依赖让我失望......

javascript ecmascript-6

147
推荐指数
5
解决办法
6万
查看次数

你怎么知道memcached是否正在做任何事情?

我正在测试使用memcached来缓存django视图.如何判断memcached是否实际缓存了Linux命令行中的任何内容?

django memcached django-cache

74
推荐指数
8
解决办法
6万
查看次数

如何通过redis-cli显示所有密钥?

我使用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)

django redis

51
推荐指数
1
解决办法
8万
查看次数

Django中大型表的内存有效(常量)和速度优化迭代

我有一张很大的桌子.它目前在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 + LIMITSQL中的查询.

就像是:

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)

sql database django

38
推荐指数
1
解决办法
3726
查看次数

用Gunicorn运行Django - 最佳实践

使用gunicorn运行django应用程序有3种方法:

  1. 标准gunicorn+ wsgi(参考django doc)

    gunicorn project.wsgi:application

  2. 使用gunicorn django集成(ref gunicorn docdjango doc):

    python manage.py run_gunicorn

  3. 使用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文件中设置一些默认值并避免其他设置是否有意义?

参考文献:

  1. 我应该使用django-gunicorn集成还是wsgi?只涉及选择1.和3.,没有提示设置,答案没有理由
  2. 使用gunicorn和nginx部署Django会提供更广泛的信息,但不是严格相关的,也不回答这个问题
  3. Django Gunicorn wsgi关于版本"4",这是启动gunicorn -c configfile和配置文件将指向django_settings到django
  4. Django WSGI和Gunicorn只是有点混乱:)混合1.和3.当然wsgi.py只用1.

django gunicorn

33
推荐指数
1
解决办法
2万
查看次数

Django长期运行线程/处理的异步任务

免责声明:我知道SO上有几个类似的问题.我想我读的大多数,如果不是全部,但没有找到我真实问题的答案(见后文).我也知道使用celery或其他异步队列系统是实现长时间运行任务的最佳方法 - 或者至少使用cron管理的脚本.还有关于进程和线程的mod_wsgi文档,但我不确定我是否正确.

问题是:

使用其中列出的解决方案涉及哪些确切的风险/问题?它们中的任何一个都适用于长时间运行的任务(好吧,即使芹菜更适合)?我的问题更多是关于理解wsgi和python/django的内部结构,而不是找到最好的整体解决方案.阻塞线程,不安全访问变量,僵尸处理等问题.

让我们说:

  1. 我的"long_process"正在做一些非常安全的事情.即使它失败了我也不在乎.
  2. python> = 2.6
  3. 我在守护进程模式下使用带有apache的mod_wsgi(用uwsgi或gunicorn会有什么变化吗?)

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)

我认为这些是可用于启动单独进程(在广义上意味着)的选项,以便在快速返回对用户的响应的同时执行长时间运行的任务:

os.fork

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)

这应该解决线程并发问题,不应该吗?


所以这些是我能想到的选择.什么会起作用,什么不起作用,为什么?

django asynchronous mod-wsgi

30
推荐指数
2
解决办法
2万
查看次数

如何更改Netbeans中使用的行结尾

Netbeans在线结尾有这个wiki条目:http://wiki.netbeans.org/FaqEditorEOLs

但它并不是很有用.它只是说你不应该在不同的操作系统上开发,那就是......

然而,在我的情况下,我没有权力.我在Windows机器上,我正在处理的PHP应用程序需要以UNIX EOL结束.

似乎没有为新文件设置此选项的选项.谁能告诉我在哪里设置这个?

netbeans eol

22
推荐指数
3
解决办法
2万
查看次数

display:table-cell不在输入元素上工作

我想将表单的一部分看起来像电子表格.有几种形式,<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>,然后具有盒模型玩得到它好看...

css

21
推荐指数
1
解决办法
8947
查看次数

如何让Django-Piston在序列化输出中包含相关的子对象?

我把头发拉到这里是因为这对我不起作用,看起来应该是这样.

我正在使用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 foreign-keys django-piston

12
推荐指数
1
解决办法
3071
查看次数

Django-cms用于多个网站

如何设置django-cms项目以支持多个网站?

官方文档中没有提到这一点,邮件列表中只有有限的信息,但标题是"用于管理内容的分层页面的Django应用程序,可能是多种语言和/或多个站点".并且通过Django Sites Framework已经内置了支持,并且在管理页面中可以与不同的站点相关联.

有关:

Django-CMS:同一项目中的多个域

django django-cms

11
推荐指数
1
解决办法
3782
查看次数