我将内容导入到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发布于 2015-07-31 14:23:15
我认为是这样的,下面的代码来自collective.jsonmigrator.partialcommit,它对我来说一直都很好。
您可以始终导入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 += 1https://stackoverflow.com/questions/31731206
复制相似问题