我有一个配置得很好的芹菜,可以使用django。 在post_save信号上,我使用任务将新记录发送到集合 并使用另一个定期任务,我正在尝试使用该集。
from __future__ import absolute_import, unicode_literals
from celery import shared_task
class Data():
def __init__(self):
self.slotshandler = set()
global data
data = Data()
@shared_task
def ProcessMailSending(): #This is a periodic task, running every 30 seconds
global data #This variable is always empty here
while slotshandler:
slot_instance = slotshandler.pop()
print("sending mail for slot } to {} by mail {}".format(slot_instance .id,slot_instance .user,slot_instance .user_mail))
@shared_task
def UpdateSlotHandler(new_slot): #This is called by save_post django signal
global data
data.slotshandler.add(new_slot) #filling the set at each new record
问题是此任务看不到我新添加的时间段。 请注意,这个 Django 应用程序运行在微服务上,用于向用户发送提醒邮件。
不同的芹菜任务会产生不同的进程,这些进程不共享对内存的访问。 即您的全局在这些进程之间不是持久的。第一个任务完成后,将刷新与其进程关联的所有内存。第二个任务在内存中创建一组全新的对象,包括全局变量。
您确实需要将数据保存在更持久的东西中,无论是数据库还是内存缓存(例如Memcache(。