实例中的异步工作线程

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应该没问题。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Spinner选定值未上载到firebase数据库   java如何通过bukkit中的配置添加消息?   java在SharedReference中保存列表的泛型类型   javascript Java小程序未定义   swt在Java中构建控制台应用程序   java OAuth同意屏幕没有突然显示,没有错误?   java webview选择文件安卓不工作   java Spring boot JPA如何从同一连接添加多个数据库?   java JDBC DB2驱动程序计时器线程处于阻塞状态   java我在vscode中运行flatter时看到一个错误在phone中运行应用程序somone能否帮助我plz   Java:生成JSON:如何避免生成不完整的JSON   java Date compareTo()方法始终返回1   当使用Junit runner运行测试时,java Spring自动连线失败   java Android/Sockets如何将信息从主UI线程发送到socket线程?   java Android内存声明全局变量   java如何在JBoss中拥有多个具有相同JNDI名称的数据源?   python在Java中嵌入CPython时,为什么会挂起?   java如何提供深度模拟对象?   java“find:smallint,expected:integer”Hibernate对informix数据库的验证在短时间内失败