小编kev*_*kev的帖子

docker容器使用多少个CPU?

假设我在一个生成多个进程的docker容器中运行多处理服务,docker会使用主机的所有/多个内核/ CPU还是只有一个?

docker

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

Django,ImportError:无法导入名称Celery,可能循环导入?

我在这里看过这个例子:

http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html

我的所有任务都在名为tasks.py的文件中.

更新芹菜并从示例中添加文件django抛出以下错误,无论我尝试什么:

ImportError: cannot import name Celery
Run Code Online (Sandbox Code Playgroud)

问题可能是由以下原因引起的吗?

app.autodiscover_tasks(settings.INSTALLED_APPS, related_name='tasks')
Run Code Online (Sandbox Code Playgroud)

因为它遍历所有具有以下导入的tasks.py文件.

from cloud.celery import app
Run Code Online (Sandbox Code Playgroud)

cloud/celery.py:

from __future__ import absolute_import

import os, sys
from celery import Celery
from celery.schedules import crontab
from django.conf import settings

BROKER_URL = 'redis://:PASSWORD@localhost'

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'cloud.settings')
app = Celery('cloud', broker=BROKER_URL)
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(settings.INSTALLED_APPS, related_name='tasks')

if "test" in sys.argv:
    app.conf.update(
        CELERY_ALWAYS_EAGER=True,
    )
    print >> sys.stderr, 'CELERY_ALWAYS_EAGER = True'

CELERYBEAT_SCHEDULE = {
    'test_rabbit_running': {
        "task": "retail.tasks.test_rabbit_running",
        "schedule": 3600, #every hour
    },
    [..]

app.conf.update(
    CELERYBEAT_SCHEDULE=CELERYBEAT_SCHEDULE
)
Run Code Online (Sandbox Code Playgroud)

retail/tasks.py …

python django importerror celery

41
推荐指数
8
解决办法
4万
查看次数

以root身份启动supervisord?

主管在3.0上运行:

pip freeze | grep supervisor
supervisor==3.0
Run Code Online (Sandbox Code Playgroud)

从命令行启动supervisord时:

sudo $VIRTENV/supervisord --nodaemon --configuration $PATH_TO_CONFIG/supervisord.conf
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

2013-11-11 23:30:50,205 CRIT Supervisor running as root (no user in config file)
Run Code Online (Sandbox Code Playgroud)

但是如果没有sudo我就无法启动监督,它抱怨道:

Error: Cannot open an HTTP server: socket.error reported errno.EACCES (13)
Run Code Online (Sandbox Code Playgroud)

处理它的正确方法是什么?

(如果以root用户身份启动它,但在supervisord.conf的[supervisord]部分下设置user = foobar,则会出现同样的错误)

更新:这是我的supervisord.conf

[unix_http_server]
file = /opt/run/supervisord.sock

[inet_http_server]
port = 9001
username = foobar
password = foobar

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisord]
logfile = /opt/logs/supervisord.log
loglevel = debug
pidfile = /opt/run/supervisord.pid

[supervisorctl]

[program:foo1]
user = foobar
autostart = …
Run Code Online (Sandbox Code Playgroud)

python startup supervisord

33
推荐指数
4
解决办法
6万
查看次数

例外:从请求的数据流中读取后,您无法访问正文

由于Django 1.5原始帖子数据可以通过request.body访问.

在我的应用程序中,我有时会通过表单和有时原始数据(例如json)发送数据.有没有办法写这样一个不会失败的函数?

def get_post_var(request, name):
    result = request.POST.get(name)
    if result:
        return result

    post_body = dict(urlparse.parse_qsl(request.body))
    result = post_body.get(name)
    if result:
        return result

    return None
Run Code Online (Sandbox Code Playgroud)

django post exception request

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

HEALTHCHECK:Dockerfile与docker-compose.yml

我们正在使用Docker Compose文件和Docker Swarm部署我们的服务.我想知道将健康检查放在Dockerfile中是否有任何区别,或者将它放在docker-compose.yml中是否更好.

我觉得我已经阅读了所有可用的文档,但找不到任何内容.

泊坞窗,compose.yml

healthcheck:
    test: ["CMD", "curl", "-f", "http://localhost:8081/ping"]
    interval: 30s
    timeout: 10s
Run Code Online (Sandbox Code Playgroud)

Dockerfile

HEALTHCHECK --interval=30s --timeout=10s CMD curl -f http://localhost:8081/ping
Run Code Online (Sandbox Code Playgroud)

docker dockerfile docker-compose docker-swarm

17
推荐指数
1
解决办法
2278
查看次数

使用moment.js根据RFC 3339格式化时间戳

像这样:

const RFC_3339 = 'YYYY-MM-DDTHH:mm:ss';
moment.utc().format(RFC_3339);
Run Code Online (Sandbox Code Playgroud)

我需要时间戳在结尾处有一个'Z'.有没有更好的方式+'Z'呢?

它应匹配后端的python代码:

RFC_3339_FMT = "%Y-%m-%dT%H:%M:%SZ"
Run Code Online (Sandbox Code Playgroud)

momentjs

14
推荐指数
2
解决办法
9617
查看次数

Django:如何将日志级别设置为INFO或DEBUG

我试图在Django中将调试级别更改为DEBUG,因为我想在我的代码中添加一些调试消息.它似乎没有效果.

我的日志配置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
            'formatter': 'simple'
        },
    },
    'loggers': {
        'django.request':{
            'handlers': ['console'],
            'propagate': False,
            'level': 'DEBUG',
        },
    },
}
Run Code Online (Sandbox Code Playgroud)

码:

import logging ; logger = logging.getLogger(__name__)
logger.debug("THIS MESSAGE IS NOT SHOWN IN THE LOGS")
logger.warn("THIS ONE IS")
Run Code Online (Sandbox Code Playgroud)

控制台上的输出:

WARNING:core.handlers:THIS ONE IS
Run Code Online (Sandbox Code Playgroud)

我也尝试在我的设置文件中设置DEBUG = False和DEBUG = True.有任何想法吗?

编辑:如果我直接在记录器上设置日志级别,它可以工作:

import logging ; logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
logger.debug("THIS MESSAGE IS NOT SHOWN …
Run Code Online (Sandbox Code Playgroud)

python django logging configuration-files

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

Django transaction.atomic()保证原子READ + WRITE?

我需要确保从数据库中读取并写回的对象不能在此期间被另一个请求/进程修改.

transaction.atomic()保证吗?

到目前为止我的测试告诉我没有.如果他们没有任何问题,那么实现原子READS和WRITES的正确方法是什么?


我测试过的例子.

Test类放在模型中的某个位置.atomic_test.pyatomic_test2.py应保存为管理命令.首先运行python manage.py atomic_test,然后运行python manage.py atomic_test2.第二个脚本不会阻止,其更改将丢失.

models.py

class Test(models.Model):
    value = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)

atomic_test.py

from django.core.management.base import NoArgsCommand
from django.db import transaction
from time import sleep
from core.models import Test

class Command(NoArgsCommand):
    option_list = NoArgsCommand.option_list

    def handle(self, **options):
        Test.objects.all().delete()
        t = Test(value=50)
        t.save()

        print '1 started'
        with transaction.atomic():
            t = Test.objects.all()[0]
            sleep(10)
            t.value = t.value + 10
            t.save()
        print '1 finished: %s' %Test.objects.all()[0].value
Run Code Online (Sandbox Code Playgroud)

atomic_test2.py

from django.core.management.base import NoArgsCommand …
Run Code Online (Sandbox Code Playgroud)

python django concurrency transactions atomic

9
推荐指数
1
解决办法
8127
查看次数

Django/Raven/Sentry:不同DSN的不同记录器

如何配置Django logging以支持不同的DSN loggers

像这样的东西:

settings.py

  LOGGING = {
    ..
    'handlers': {
        'sentry1': {
            'level': 'ERROR',
            'class': 'raven.contrib.django.handlers.SentryHandler',
            'dsn': '<DSN1>',
        },        
        'sentry2': {
            'level': 'ERROR',
            'class': 'raven.contrib.django.handlers.SentryHandler',
            'dsn': '<DSN2>',
        },
    },
    'loggers': {
        'sentry1':{
            'handlers': ['console', 'sentry1'],
            'level': 'ERROR',
            'propagate': False,
        },
        'sentry2':{
            'handlers': ['console', 'sentry2'],
            'level': 'ERROR',
            'propagate': False,
        },
}
Run Code Online (Sandbox Code Playgroud)

views.py

import logging
logger = logging.getLogger('sentry2')
logger.error('yeey!')
Run Code Online (Sandbox Code Playgroud)

python django logging sentry raven

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

跑步时看不到我的芹菜原木

我通过supervisord开始芹菜,请参阅下面的条目.

[program:celery]
user = foobar
autostart = true
autorestart = true
directory = /opt/src/slicephone/cloud
command = /opt/virtenvs/django_slice/bin/celery beat --app=cloud -l DEBUG -s /home/foobar/run/celerybeat-schedule --pidfile=/home/foobar/run/celerybeat.pid
priority = 100
stdout_logfile_backups = 0
stderr_logfile_backups = 0
stdout_logfile_maxbytes = 10MB
stderr_logfile_maxbytes = 10MB
stdout_logfile = /opt/logs/celery.stdout.log
stderr_logfile = /opt/logs/celery.stderr.log
Run Code Online (Sandbox Code Playgroud)

pip冻结| grep芹菜

celery==3.1.0
Run Code Online (Sandbox Code Playgroud)

但任何用法:

@celery.task
def test_rabbit_running():
    import logging
    from celery.utils.log import get_task_logger
    logger = get_task_logger(__name__)
    logger.setLevel(logging.DEBUG)
    logger.info("foobar")
Run Code Online (Sandbox Code Playgroud)

没有出现在日志中.相反,我得到如下条目.

celery.stdout.log

celery beat v3.1.0 (Cipater) is starting.
__    -    ... __   -        _
Configuration ->
    . …
Run Code Online (Sandbox Code Playgroud)

python logging celery supervisord

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