mysql 查询任务_对MySQL查询返回的每一行运行celeri任务?

我以前用过Python,但只用于烧瓶应用,但我从来没有用过芹菜。在阅读了文档并设置了所有内容(它的工作原理与我在多个worker中测试的一样)之后,我尝试运行一个SQL查询,对于从查询中返回的每一行,都将其发送给一个芹菜工人来处理。在

下面是一个非常基本的代码示例。在from celery import Celery

import MySQLdb

app = Celery('tasks', broker='redis://localhost:6379/0')

@app.task

def print_domain():

db = MySQLdb.connect(host="localhost", user="DB_USER", passwd="DB_PASS", db="DB_NAME")

cur = db.cursor()

cur.execute("SELECT * FROM myTable")

for row in cur.fetchall():

print_query_result(row[0])

db.close()

def print_query_result(result):

print result

基本上,它选择'myTable'表中的所有内容,并为返回的每一行打印出来。如果我只使用Python调用代码,它可以很好地打印MySQL表中的所有数据。当我使用.delay()函数调用它,将它发送给一个worker进行处理时,它只将它发送给一个worker,并且只输出数据库中的顶行。在

我一直在努力阅读子任务,但我不确定我是否朝着正确的方向前进。在

简言之,我希望这一切发生,但我不知道从哪里开始。有人有什么想法吗?在选择表中所有行的SQL查询

将每一行/结果发送给worker以处理某些代码

将代码结果返回数据库

提取队列中的下一个项目(如果有)

提前谢谢。在

编辑1:

我已经更新了代码,改为使用SQLAlchemy,但是结果仍然像我以前的查询一样返回,这很好。在

^{pr2}$

运行.py文件时,worker返回:[2016-08-02 02:08:40,881: INFO/MainProcess] Received task: tasks.print_domain[65d7667a-fc70-41f7-8caa-b991f360a9de]

[2016-08-02 02:08:41,036: WARNING/Worker-3] result1

[2016-08-02 02:08:41,037: WARNING/Worker-3] result2

[2016-08-02 02:08:41,039: INFO/MainProcess] Task tasks.print_domain[65d7667a-fc70-41f7-8caa-b991f360a9de] succeeded in 0.154022816569s: None

如您所见,worker从我正在查询的表中获取'result1'和'result2',但它似乎没有在子任务中执行命令,该子任务只是打印“Job received”。在

更新:看起来子任务的末尾必须有一个.delay(),根据Celery文档,所以我的代码看起来是这样的,并且现在成功地将作业分发给了工人。在from celery import Celery

from models import DBDomains

app = Celery('tasks', broker='redis://localhost:6379/0')

@app.task

def print_domain():

query = DBDomains.query.all()

for i in query:

subtask = print_query_result.s(i.domain)

subtask.delay()

@app.task

def print_query_result(domain):

print domain

print_domain.delay()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值