![](/img/trans.png)
[英]Celery not queuing tasks to broker on remote server, adds tasks to localhost instead
[英]Queuing large number of celery tasks
我正在使用Celery分布式任務調度庫編寫python3應用程序。 工人正在使用greenlet線程進行處理。 任務是與網絡操作相關的I / O.
我需要將大量芹菜任務作為單個組插入。 在這種情況下,它一次大約10000(10k)url,每個作為單獨的芹菜任務。
這種插入為單一組,在localhost上運行redis或rabbitmq需要大約12秒。 哪個太長了。
問:有沒有辦法用芹菜來優化這種大量插入?
在其他線程中,我發現人們不喜歡使用塊,但是當我以塊的形式提交它時 - 單個塊正在單線程中處理(不使用greenlet,這是必要的,因為在工作者操作上阻塞了IO)。 這導致性能下降。 考慮以下數字:
因此,使用塊是不可能的,因為阻塞網絡操作將破壞greenlet線程的性能優勢。
soa = open('input.txt').readlines()
for line in soa:
line = line.strip()
s = line.split(':')
l.append(check.s(s[0], s[1]))
#l.append(s)
t = time.time()
res = check.chunks(l, 10)()
#print(res.get())
print("Submission taken %f" % (time.time() - t))
exit()
Chunks結果:提交時間為2.251796秒
l = []
soa = open('input.txt').readlines()
for line in soa:
line = line.strip()
s = line.split(':')
l.append(s)
job = group(l)
t = time.time()
result = job.apply_async()
print("Submission taken %f" % (time.time() - t))
常規結果:提交時間為12.54412秒
Celery字面上有一個名為Group and Chunk的任務包裝器。
https://docs.celeryproject.org/en/latest/userguide/canvas.html
我認為Chunk需要一個結果后端,但是只需將您的任務分成50到200個URL組,就可以讓Celery為您進行優化。
但是,如果您正在執行10000個網絡綁定任務,那么它將需要一秒鍾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.