小编Win*_*oon的帖子

celery,celerybeat和django-celery-beat能否在运行时动态添加/删除任务而无需重启celerybeat?

我尝试了我能找到的一切,包括:

堆栈溢出

如何动态添加/删除周期性任务到芹菜(celerybeat)

celery celerybeat可以在运行时动态添加/删除任务吗?

Github问题

如何动态添加或删除celerybeat的任务?

我从上面得到的是,如果我只使用芹菜和芹菜,我必须在添加/删除任务后重新启动芹菜.但如果我结合django-celery-beat,我就不必重新启动它.

我一步一步地遵循文档:

from celery import Celery
from celery.schedules import crontab

app = Celery('tasks')
app.config_from_object('celeryconfig')
app.conf.timezone = 'UTC'

@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
    # Calls test('hello') every 10 seconds.
    sender.add_periodic_task(10.0, test.s('hello'), name='add every 10')

    # Calls test('world') every 30 seconds
    sender.add_periodic_task(30.0, test.s('world'), expires=10)

    # Executes every Monday morning at 7:30 a.m.
    sender.add_periodic_task(
        crontab(hour=7, minute=30, day_of_week=1),
        test.s('Happy Mondays!'),
    )

@app.task
def test(arg):
    print(arg)
Run Code Online (Sandbox Code Playgroud)

我的celeryconfig

BROKER_URL = 'amqp://rabbit'
CELERY_RESULT_BACKEND = 'rpc://rabbit'
CELERY_RESULT_PERSISTENT = True
# …
Run Code Online (Sandbox Code Playgroud)

python django celery

14
推荐指数
1
解决办法
2106
查看次数

如何根据其他列逐列使用

这是我的表trans:

id //  user_id  //  money  // type  //  date
 1        1001         20      1    2015-11-1
 2        1001         50      1    2015-11-1
 3        1001         50      2    2015-11-2
 4        1001         50      2    2015-11-3
 5        1002         10      2    2015-11-3
 6        1002         20      2    2015-11-1
 7        1002         70      3    2015-11-1
 8        1003         80      1    2015-11-2
 9        1003         10      1    2015-11-3
10        1003         20      1    2015-11-3
Run Code Online (Sandbox Code Playgroud)

我想输出像:

id //  user_id  //  sum_money_1  //  sum_money_2  // sum_money_3  // date
 1        1001         10                10              20     2015-11-1
 2        1001 …
Run Code Online (Sandbox Code Playgroud)

mysql sql

10
推荐指数
1
解决办法
278
查看次数

与原始sql相比,Django ORM性能不佳

我正在使用Django ORM进行数据查询,我在这个表中得到了近200万行.我试过了

app_count = App.objects.count()
Run Code Online (Sandbox Code Playgroud)

from django.db import connection
cursor = connection.cursor()
cursor.execute('''SELECT count(*) FROM app''')
Run Code Online (Sandbox Code Playgroud)

mysql slow_query日志给了我

时间:2017-04-27T09:18:38.809498Z

User @ Host:www [www] @ [172.19.0.3] Id:5

Query_time:4.107433 Lock_time:0.004405 Rows_sent:1 Rows_examined:0

使用app_platform; SET时间戳= 1493284718; SELECT count(*)FROM app;

这个查询花了超过4秒的avg,但是当我使用mysql客户端和mysql shell来做这个查询时

mysql> select count(*) from app;

+----------+
| count(*) |
+----------+
|  1870019 |
+----------+

1 row in set (0.41 sec)
Run Code Online (Sandbox Code Playgroud)

只需要0.4秒,10倍的差异,为什么以及如何改进它.

编辑

这是我的模特

class AppMain(models.Model):
    """
    """
    store = models.ForeignKey("AppStore", related_name="main_store")
    name = models.CharField(max_length=256)
    version = models.CharField(max_length=256, blank=True)
    developer = models.CharField(db_index=True, …
Run Code Online (Sandbox Code Playgroud)

mysql django django-orm

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

如何在 Django rest 框架中使用一对多模型

我有两个简单的模型,第一个是

class Post(models.Model):
    user = models.ForeignKey("common.MyUser", related_name="post_user")
    act = models.ForeignKey("activities.Act", related_name="post_act")
    post_title = models.CharField(max_length=30, blank=True)
    post_content = models.CharField(max_length=140)
    post_thumb_url = models.URLField()
    post_create_time = models.DateTimeField(auto_now=True)
Run Code Online (Sandbox Code Playgroud)

第二个是

class Comment(models.Model):
    post = models.ForeignKey("post.Post", related_name="comment_post")
    user = models.ForeignKey("common.MyUser", related_name="comment_user")
    reply_id = models.IntegerField()
    comment_content = models.CharField(max_length=140)
    comment_create_time = models.DateTimeField(auto_now=True)
Run Code Online (Sandbox Code Playgroud)

每个帖子可能有一些评论。现在我想使用帖子 ID 获取每个帖子信息及其所有评论。例如:

api.example.com/post/?post_id=1此贴有两条评论)并返回

 {
        "id": 26,
        "user": 22,
        "post_comment": [{
            "reply_id": 12,
            "comment_content": "How are you doing",
            "comment_create_time": "2015-11-19",
        },
        {
             "reply_id": 32,
            "comment_content": "My name is Sun",
            "comment_create_time": "2015-11-19",
        }]
        "post_title": …
Run Code Online (Sandbox Code Playgroud)

django rest django-rest-framework

6
推荐指数
1
解决办法
6500
查看次数

为什么我们不能直接存储Unicode?

我读了一些文章有关Unicode和UTF-8。

Unicode 标准描述了字符如何由代码点表示。代码点是一个整数值,通常以 16 进制表示。在标准中,代码点使用符号 U+12CA 表示,表示值为 0x12ca(十进制 4,810)的字符。Unicode 标准包含许多列出字符及其相应代码点的表格:

严格来说,这些定义意味着说“这是字符 U+12CA”是没有意义的。U+12CA 是一个码位,代表某个特定的字符;在这种情况下,它代表字符“ETHIOPIC SYLLABLE WI”。在非正式环境中,有时会忘记代码点和字符之间的这种区别。

总结上一节:Unicode 字符串是一系列代码点,它们是从 0 到 0x10FFFF(十进制的 1,114,111)的数字。该序列需要表示为内存中的一组字节(即 0 到 255 之间的值)。将 Unicode 字符串转换为字节序列的规则称为编码。

我想知道为什么我们必须将 U+12CA 编码为 UTF-8 或 UTF-16,而不是将 12CA 的二进制文件直接保存在磁盘中。我认为原因是:

  1. Unicode 不是自同步代码,所以如果

    10 represent A
    110 represent B
    10110 represent C
    
    Run Code Online (Sandbox Code Playgroud)

当我在磁盘中看到 10110 时,我们无法分辨它是 A 和 B 还是只是 C。

  1. Unicode 使用更多的空间,而不是 UTF-8 或 UTF-16。

我对吗?

unicode encoding utf-8

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