小编Jon*_*ans的帖子

Celery工作人员如何从多个队列消费决定从哪个队列消费?

我使用Celery来执行异步后台任务,Redis作为后端.我对Celery工作人员在以下情况下的行为感兴趣:

我正在使用一个守护进程作为守护进程celeryd.已通过该-Q选项为此工作人员分配了两个队列以供使用:

celeryd -E -Q queue1,queue2
Run Code Online (Sandbox Code Playgroud)

工作人员如何决定从哪里获取下一个要使用的任务?是否随机消耗任何一个任务queue1queue2?它会优先获取,queue1因为它是传递给参数列表中的第一个-Q吗?

scheduled-tasks celery celeryd

24
推荐指数
2
解决办法
6106
查看次数

检查密钥是否存在且其值在Python字典中不是空字符串

在Python字典中为键/值对分配变量是否有明确的最佳实践:

  • 如果密钥存在
  • 如果键的值不是空字符串

否则为变量分配默认值.

我想用dict.get:

my_value = dict.get(key, my_default)
Run Code Online (Sandbox Code Playgroud)

但是my_value如果键存在且值为空字符串,则会为其分配一个空字符串.使用以下内容是否更好:

if key in dict and dict[key]:
    my_value = dict[key]
else:
    my_value = my_default
Run Code Online (Sandbox Code Playgroud)

这将利用空字符串的真实性来确保仅分配非空字符串my_value.

有没有更好的方法来执行此检查?

python string dictionary

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

在YouTube用户上传Feed中访问超出start_index = 1000的商品

我目前正在尝试从YouTube用户上传Feed中提取有关视频的数据.此Feed包含特定用户上传的所有视频,并可通过以下请求从API访问:

http://gdata.youtube.com/feeds/api/users/USERNAME/uploads
Run Code Online (Sandbox Code Playgroud)

USERNAME是拥有Feed的YouTube用户的名称.

但是,我在尝试访问超过1000个视频的Feed时遇到了问题.由于每个API请求都可以返回50个项目,因此我使用max_length和start_index遍历feed,如下所示:

http://gdata.youtube.com/feeds/api/users/USERNAME/uploads?start-index=1&max-results=50&orderby=published
http://gdata.youtube.com/feeds/api/users/USERNAME/uploads?start-index=51&max-results=50&orderby=published
Run Code Online (Sandbox Code Playgroud)

依此类推,每次调用时start_index增加50.这完美地工作直到:

http://gdata.youtube.com/feeds/api/users/USERNAME/uploads?start-index=1001&max-results=50&orderby=published
Run Code Online (Sandbox Code Playgroud)

此时我收到400错误通知我'您不能请求超出项目1000'.这让我很困惑,因为我认为查询只会返回50个视频:1001-1051,按照最近发布的顺序排列.浏览完文档后,我发现了这一点:

限制结果计数和可访问结果

...

对于任何给定的查询,即使有多个结果,您也无法检索超过1,000个结果.如果您尝试检索超过1,000个结果,API将返回错误.因此,如果将start-index查询参数设置为值1001或更大,API将返回错误.如果start-index和max-results参数的总和大于1,001,它也将返回错误.

例如,如果将start-index参数值设置为1000,则必须将max-results参数值设置为1,如果将start-index参数值设置为980,则必须设置max-results参数值为21或更低.

我不知道如何以一致的方式访问通用用户上次上传的第1001个视频及其他视频,因为它们无法仅使用max-results和start-index进行索引.有没有人对如何避免这个问题有任何有用的建议?我希望我清楚地概述了这个难点!

youtube youtube-api gdata

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

是否可以将带有无关元素的字典传递给Django object.create方法?

我知道在Django中使用MyModel.objects.create时,可以使用与MyModel中的模型字段对应的键传入字典.这在另一个问题中解释:可以在创建时将字典传递给django模型吗?

但是,我试图传入一个字典,其中包含比模型字段更多的键 - 换句话说,某些键不用于创建对象.是否有可能以某种方式做到这一点?例如:

data_dict = {
    'key1': value1,
    'key2': value2,
    'key3': value3,
}

class MyModel(models.Model):
    key1 = models.SomeField()
    key2 = models.SomeField()

m = MyModel.objects.create(**data_dict)
Run Code Online (Sandbox Code Playgroud)

当我尝试这个时,我收到一个错误,告诉我"'key3'是这个函数的无效关键字参数".我错误地传递了字典吗?有没有不同的方法将它传递给模型,这意味着模型不必使用所有参数?或者我只需要手动指定每个字段,如下所示:

m = MyModel.objects.create(
    key1 = data_dict['key1'],
    key2 = data_dict['key2'],
)
Run Code Online (Sandbox Code Playgroud)

python django dictionary django-models

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