实例中的异步工作线程
cubicweb-worker的Python项目详细描述
摘要
实例中的异步工作线程
如何使用此立方体
将工作多维数据集添加到多维数据集的依赖项中。在你的模式中, 必要时扩展多维数据集的架构。常见的扩展通常包括 向cwWorkerTask实体添加属性和关系 包含与任务相关的信息(数据、与其他任务的关系 数据库中的实体…。
然后扩展cwworker实体类。它应该有do_xxxx 方法,其中xxxx与操作属性的值匹配 工作任务实体的。这些方法用两个参数调用:a 会话和任务。您通常使用该任务来获取额外的 关于需要做什么的参数。该方法应返回 将在转换中用作消息的Unicode字符串 CWWorkerTask的信息。
下面是一个cwworker方法的示例,该方法将异步地 从数据库中删除一个实体,如果 实体有许多复合关系,其删除将触发 冗长的连锁删除。实体位于添加的 cwWorkerTask关系名为target:
def do_delete_entity(self, session, task): entity = task.target[0] session.execute('DELETE Any X WHERE X eid %(eid)s', {'eid': entity.eid}) return _('Success')
要触发删除,只需创建 CWWorkerTask具有正确的操作和目标(在本例中是 可能需要重写cubicweb.web.views.editforms.deleteconformview 以及设置自定义控制器):
task = self._cw.create_entity('CWWorkerTask', operation=u'delete_entity', target=some_entity)
实例设置
您需要配置您的实例来启动辅助进程。完成了 通过在实例中将long-transaction-worker设置为true 配置文件(位于[WORKER]部分)。这个遗嘱 启动定期任务(还可以使用 worker-polling-period)它将在 数据库。当找到一个任务时,工作人员会抓住它并开始 正在努力。^ {TT7}$选项设置最大数目 可以由工作进程同时运行的任务。默认为2 您可能希望将其设置为1,但设置更高的值将 降低性能。
你可以像往常一样设置你的实例并用一个辅助进程配置它, 但是有效的方法是设置2个实例(或者 更多)共享一个公共数据库。一审将有 long-transaction-worker选项设置为false并将集中 将创建新的CWWorkerTask。其他的 实例只能是存储库(即cubicweb-ctl create -c repository -a somecube myworkerinstance),并且将具有 long-transaction-worker设置为true。这将确保 工人和web服务进程并没有为python的 全局解释器锁,并提供最大性能。
关于连接池大小的说明:由工作进程处理的每个任务 通常可以使用池中最多3个连接。如果你在跑步 一个与web服务相同的工人,您可以 可能需要设置更大的connections-pool-size值 比默认值(4):7或8应该没问题。