# models.py
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
text_blob = models.CharField(max_length=50000)
# tasks.py
import celery
@celery.task
def my_task(person):
# example operation: does something to person
# needs only a few of the attributes of person
# and not the entire bulky record
person.first_name = person.first_name.title()
person.last_name = person.last_name.title()
person.save()
Run Code Online (Sandbox Code Playgroud)
在我的应用程序的某个地方我有类似的东西:
from models import Person
from tasks import my_task
import celery
g = celery.group([my_task.s(p) for p in Person.objects.all()])
g.apply_async()
Run Code Online (Sandbox Code Playgroud)
如何有效且均匀地将Person记录分发给在多台机器上运行的工作人员?
这可能是一个更好的主意吗?如果Person有几百万条记录,难道不会压倒db吗?
# tasks.py …Run Code Online (Sandbox Code Playgroud)那么标题是自我解释的.相当于git reset --hard使用GitPython模块运行(在终端上)的python代码是什么?
In [136]: a = [1,2,3,4,5]
In [137]: print yaml.dump(a)
[1, 2, 3, 4, 5]
In [138]: a = [1,2,3,4,5, [1,2,3]]
In [139]: print yaml.dump(a)
- 1
- 2
- 3
- 4
- 5
- [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
为什么上述两种产出dumps不同?是否有可能强制pyYAML分裂list总是?
@celery.task
def my_task(my_object):
do_something_to_my_object(my_object)
#in the code somewhere
tasks = celery.group([my_task.s(obj) for obj in MyModel.objects.all()])
group_task = tasks.apply_async()
Run Code Online (Sandbox Code Playgroud)
问:celery 有没有什么东西可以检测一个小组任务的进度?我可以计算有多少任务以及已经处理了多少任务吗?
我目前正参与一个项目,要求我反复拍摄屏幕快照.我正在使用qt的grabScreen函数来做同样的事情.每当程序拍摄快照导致计算机看起来非常慢时,屏幕会冻结半秒钟:(
任何人都可以建议我这样做的更好的方法吗?
我有一个sql:
select field2, count(distinct field1) from table group by field2;
Run Code Online (Sandbox Code Playgroud)
如何在pymongo中实现这个sql?
我正在玩python多处理模块,并希望能够显示当前正在执行的进程的名称.
如果我创建一个继承自multiprocessing.Process的自定义MyProcess类,我可以通过以下方式打印进程的名称
from multiprocessing import Process
class MyProcess(Process):
def __init__(self):
Process.__init__(self)
def run(self):
#do something nasty and print the name
print self.name
p = MyProcess()
p.start()
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用Process类的构造函数创建进程
from multiprocessing import Process
def somefunc():
print Process.name #1
p = Process(target=somefunc)
p.start()
print p.name #2
Run Code Online (Sandbox Code Playgroud)
#2有效但#1没有.有没有办法可以在里面打印当前正在执行的进程的名称somefunc?
import celery
def temptask(n):
header=list(tempsubtask.si(i) for i in range(n))
callback=templink.si('printed at last?')
r = celery.chord(celery.group(header))(callback)
return r
@task()
def tempsubtask(i):
print i
for x in range(i):
time.sleep(2)
current_task.update_state(
state='PROGRESS', meta={'completed': x, 'total': i })
@task()
def templink(x):
print 'this should be run at last %s'%x
#executing temptask
r = temptask(100)
Run Code Online (Sandbox Code Playgroud)
我想要了解tempsubtask更新的进度状态.我怎样才能实现它?
我正在尝试配置scrapyd以在Ubuntu Server 12.04计算机上运行.我无法将项目部署到它,因为它找不到一些库.我可以在主要或默认的python环境(由os维护的环境)中安装所有依赖项,但我不想这样做.
有没有办法scrapyd配置使用python virtualenv?如果是,怎么样?如果不是,为什么?
我要下载并保存在数据库中的列表中有一个大于100,000个url(不同的域),以便进行进一步处理和修改。
使用scrapy代替python的多处理/多线程处理是否明智?如果是,我如何编写独立脚本来执行相同操作?
另外,请随意提出其他令人敬畏的方法。