【问题标题】:Generator Expression error on Celery chord?芹菜和弦上的生成器表达式错误?
【发布时间】:2014-08-17 02:07:11
【问题描述】:

我写过这样的芹菜和弦:

current = raw_input("Please give the date in this format 'dd/mm/yyyy': ")
day,month,year = current.split('/')
date = datetime.date(int(year), int(month), int(day))
date1 = datetime.date(2014, 06, 17)
date = date.toordinal()
date1 = date1.toordinal()

callback = A.si((datetime.date.fromordinal(i)) for i in range(date,date1+1))
header = [B.si((datetime.date.fromordinal(i)) for i in range(date,date1+1))]
result = chord(header)(callback)
res = result.apply_async()
res.get()

现在我遇到了这个错误:

TypeError: object.__new__(generator) is not safe, use generator.__new__()

我怎么写callbackheader?????

【问题讨论】:

    标签: python celery


    【解决方案1】:

    我怀疑这是因为 Celery 正在执行一些序列化(默认情况下使用 pickle,具体取决于您的版本)/任务参数的副本,并且由于生成器 cannot be pickledcopied,它会产生此错误。您应该尝试使用列表(或元组):

    dates = [datetime.date.fromordinal(i) for i in range(date, date1 + 1)]
    callback = A.si(dates)
    header = [B.si(dates)]
    result = chord(header)(callback)
    res = result.apply_async()
    res.get()
    

    【讨论】:

    • 我使用了你展示的列表元素,但它现在给出了这个错误 'TypeError: descriptor 'strftime' requires a 'datetime.date' object but received a 'list''
    • 这将是您的任务中的代码错误,这可能与 Celery 无关。从错误的外观来看,您尝试将strftime 直接应用于列表dates,而不是将其应用于其每个值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 2016-01-23
    相关资源
    最近更新 更多