1
wibile 2014-09-24 20:26:46 +08:00
这不就是个爬虫嘛,没有大规模的业务不用上celery吧,celery做分布式用的。
传数据可以直接在taskA里再生成一个带参数的任务给另一个队列,作为B来执行。也可以直接用memcache。 |
2
janusle OP @wibile 因为可能会要拉很多个用户的数据所以才想到用celery。你是说在定义task A的function里调用定义task B的function然后task B入celery吗?
你说的memcache也可以是怎么个用法呢?我从twitter拉下来的是用户的timeline所以就是一个很大的json,这个可以放进memcache? |
3
no13bus 2014-09-24 20:40:31 +08:00
@janusle 我最近一直在用celery。这样能不能解决。2个任务。taskA负责爬数据入库数据表tableA,taskB负责分析tableA里面的数据,合格的数据或者说分析之后的数据入数据表tableB。taskA和taskB都作为定时任务,前者比如1s执行一次,后者10分钟一次?
|
4
janusle OP @no13bus 谢谢回答。你说的那个table A就相当于扮演一个queue的功能,这样是不是rabbitmq更适合呢?而且我想做成异步的,就是有数据就会分析。这样效率比较高。你觉得呢?
|
5
starsoi 2014-09-24 22:09:03 +08:00 1
celery 可以用chain把前一个task的返回值传给下一个task:
# (4 + 4) * 8 * 10 >>> res = chain(add.s(4, 4), mul.s(8), mul.s(10)) 你可以用TaskA拉数据,如果有数据就返回数据,没有数据就返回None. TaskB取TaskA的返回值作参数,如果是None就直接返回,如果是非None就处理数据更新数据库 |
6
wibile 2014-09-24 22:09:09 +08:00 1
@janusle 只要是定义好的task,哪里都可以用的。在task A里直接调用task_b.apply_async(kwargs=your_json)就可以把这个任务放入B队列。没必要用table,实在不想用queue,就搞个memcache存中转数据。
|
7
no13bus 2014-09-24 22:18:10 +08:00 1
|