Python 检查芹菜中完成的多项任务的最佳方法?
经过一些研究,我发现更多的问题。。。 下面是更详细的示例:Python 检查芹菜中完成的多项任务的最佳方法?,python,celery,jobs,worker,Python,Celery,Jobs,Worker,经过一些研究,我发现更多的问题。。。 下面是更详细的示例: 上载URL列表,为所有URL设置作业id(需要动态生成队列名称以进行清除) 使用芹菜任务对每个url进行爬网,例如extract.delay(作业id,url)并保存到数据库 (可能这里有很多作业---作业1、作业2、作业3)作业中的所有任务都是相同的提取,只有一个工作人员处理所有队列(如何处理?我无法将所有队列名称告诉工作人员) 选中xxx中的db选择count(id),其中job_id=yyy等于len(url), 或者用芹菜告诉我
extract.delay(作业id,url)
并保存到数据库李>
提取
,只有一个工作人员处理所有队列(如何处理?我无法将所有队列名称告诉工作人员)选择count(id),其中job_id=yyy
等于len(url)
,
或者用芹菜告诉我工作完成了我需要动态添加一个作业,一个作业包含很多任务。所有任务都是相同的。如何使不同的作业具有不同的队列名称,并且只有一个工作人员处理所有队列?我不知道您的web应用程序的详细信息,但这可能非常简单 (使用Django语法) 您可以制作两个模型/DB表。一个代表你的批次。一个代表每个URL作业
class ScrapeBatch(models.Model):
id = models.IntegerField()
class ScrapeJob(models.Model):
batch = models.ForeignKey(ScrapeBatch)
url = models.CharField(max_length=100) # for example
done = models.BooleanField(default=False)
然后,在运行芹菜任务时,使用ScrapeJob
模型作为参考
def scrape_url_celery_task(job_id):
job = ScrapeJob.objects.get(id=job_id)
scrape_url(job)
job.done=True
job.save()
因此,在webview中,您只需检查批处理的所有作业是否完成:
def batch_done(batch):
return not batch.scrapejob_set.filter(done=False).exists()
总而言之:
-保存URL的DB表
-一个DB表,用于保存类似批号的内容(与URL表有外键关系)
- 芹菜在任务完成后将URL标记为在数据库中刮取
- 通过URL表进行简单搜索,可以告诉您作业是否完成。您可以在网站上显示此值