1

我正在使用 transmogrifier 管道将内容导入 Plone,但有时可能会出现问题并且可能会引发异常。发生这种情况时,我需要再次重新启动整个过程,因为事务已完全中止。对于超过 100,000 件商品的批次,这根本无法接受。

我正在使用collective.transmogrifier.sections.savepoint部分,但这仅通过使用设置保存点transaction.savepoint(optimistic=True)

我想知道这样的新部分是否可以帮助我解决问题:

from zope.interface import classProvides, implements
from collective.transmogrifier.interfaces import ISectionBlueprint
from collective.transmogrifier.interfaces import ISection
import transaction

class CommitSection(object):
    classProvides(ISectionBlueprint)
    implements(ISection)

    def __init__(self, transmogrifier, name, options, previous):
        self.every = int(options.get('every', 1000))
        self.previous = previous

    def __iter__(self):
        count = 0
        for item in self.previous:
            count = (count + 1) % self.every
            if count == 0:
                transaction.commit()
            yield item
4

1 回答 1

1

我想是的,下面的代码来自collective.jsonmigrator.partialcommit,它对我IIRC来说总是很好用。
当然,您总是可以导入collective.jsonmigrator 并使用该蓝图,而不是自己编写代码。

class PartialCommit(object):

    classProvides(ISectionBlueprint)
    implements(ISection)

    def __init__(self, transmogrifier, name, options, previous):
        self.previous = previous
        self.step = int(options.get('every', 100))

    def __iter__(self):
        count = 1
        for item in self.previous:
            yield item
            if count % self.step == 0:
                transaction.commit()
            count += 1
于 2015-07-31T14:23:15.663 回答