是否可以在 nogil 部分中使用 Cython 扩展类型?

2024-03-08

我创建了一个 Cython 扩展类型,我想在 nogil 上下文中使用它。但编译器总是会抛出错误。这是我正在尝试做的一个简单示例:

  1 # cython: language_level=3
  2 
  3 from cython.parallel import prange
  4 
  5 cdef class C1:
  6 
  7     cdef public:
  8         int val
  9 
 10     def __cinit__(self, value):
 11         self.val = value
 12 
 13 def iterate_C1():
 14 
 15     cdef int i
 16     cdef int N = 4
 17     cdef C1 c1_i
 18 
 19     # This compiles fine
 20     c1 = C1(4)
 21     print(f'c1.val={c1.val}')
 22 
 23     # But this doesn't
 24     with nogil:
 25         for i in prange(N):
 26             c1_i = C1(i)

我遇到了很多例外情况,但它们看起来都是这样的:

Compiling c_one.pyx because it changed.
[1/1] Cythonizing c_one.pyx

Error compiling Cython file:
------------------------------------------------------------
...
    print(f'c1.val={c1.val}')

    # But this doesn't
    with nogil:
        for i in prange(N):
            c1_i = C1(i)
           ^
------------------------------------------------------------

c_one.pyx:26:12: Assignment of Python object not allowed without gil

Error compiling Cython file:
------------------------------------------------------------
...
    print(f'c1.val={c1.val}')

    # But this doesn't
    with nogil:
        for i in prange(N):
            c1_i = C1(i)
                    ^
------------------------------------------------------------

c_one.pyx:26:21: Calling gil-requiring function not allowed without gil

那么是否无法在 nogil 上下文中使用 Cython 扩展类型?


你绝对不能创建实例cdefa 内的扩展类型nogil堵塞。它们最终是 Python 对象,需要引用计数(包括在一些不明显的地方,例如类型对象)、分配 Python 管理的内存以及释放以前的内容ci,包括调用其析构函数。

您应该能够访问他们的cdef members (e.g. val对于这门课)并打电话给他们cdef被标记为的函数nogil.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以在 nogil 部分中使用 Cython 扩展类型? 的相关文章

  • 为什么 python 允许没有“pass”语句的空函数(带有文档字符串)主体?

    class SomeThing object Represents something def method one self This is the first method will do something useful one da
  • 当图例位于轴之外时选择 matplotlib 图例

    当我修改 legend picking py 示例时 我遇到了一个有趣的怪癖 其中图例位于轴之外 如下所示 leg ax legend loc upper left fancybox True shadow True leg ax lege
  • 通过 SSH 的 Pygame 不注册击键(Raspberry Pi 3)

    所以我得到了 raspi 3 和简单的 8x8 LED 矩阵 在玩了一些之后 我决定用 pygame 的事件制作一个简单的蛇游戏 显示在该矩阵上 我之前没有 pygame 的经验 除了 LED 矩阵之外 没有连接任何屏幕 显示器 所以最初的
  • 使用 Python-AppKit-Objective C 转换为预组合 Unicode 字符串

    苹果公司的这份文件技术问答 QA1235 http developer apple com qa qa2001 qa1235 html描述了一种将 unicode 字符串从组合版本转换为分解版本的方法 由于我对包含某些字符 例如重音符号 的
  • 根据两个预先计算的直方图报告两个样本的 K-S 统计量

    Problem 在这里 我绘制了存储在文本文件中的 2 个数据集 在列表中 dataset 每个包含 218 亿个数据点 这使得数据太大而无法作为数组保存在内存中 我仍然能够将它们绘制为直方图 但我不确定如何通过2 样本KS测试 http
  • PyQt:如何设置组合框项目可检查?

    为了将 GUI 小部件数量保持在最低限度 我需要找到一种方法来为用户提供下拉菜单项的选择 这些菜单项可用于过滤掉 listWidget 项中显示的内容 假设 listWidget 列出了 5 个不同类别的项目 Cat A Cat B Cat
  • 如何使用Python在没有窗口的情况下在屏幕上显示文本

    问题 我需要在没有窗口的情况下直接将文本写入屏幕 文本需要显示在所有其他窗口和全屏应用程序之上 并且不应以任何方式单击或交互 Example The text doesn t need to have a transparent backg
  • Python Raspberry pi - 如果路径不存在,则跳过循环

    我有一个收集温度 文本文件中的值 的功能 它使用部分预定义的路径 但是 有时如果温度传感器未加载 断开连接 则路径不存在 如果路径不可用 如何设置条件或例外来跳过循环 我想使用 continue 但我不知道要设置什么条件 def read
  • 带有 UnboundLocalError 的本地和全局引用

    我不太明白为什么代码 def f print s s foo f 运行得很好但是 def f print s s bar s foo f 给我 UnboundLocalError 我知道我可以通过声明来解决这个问题s作为函数内的全局变量或简
  • Flask-Mail - 基于 Flask-Cookiecutter 异步发送电子邮件

    我的烧瓶项目基于烧瓶饼干切割机 https github com sloria cookiecutter flask我需要异步发送电子邮件 发送电子邮件的功能由以下配置米格尔的教程 https blog miguelgrinberg com
  • python 没有名为serial的模块

    我的 python 程序有问题 我编写了程序来将数据 温度 从 arduino 获取到我的树莓派 sqlite 数据库 但它在第 4 行 导入串行 处给了我一个错误 提示 ImportError 没有名为串行的模块 我使用 python3
  • 通过Python通过蓝牙发送消息或数据

    如何通过 python 通过蓝牙发送消息 而无需输入数字等密钥身份验证 我用过 pybluez 但我收到了这个错误 File send line 12 in
  • Keras ImageDataGenerator 相当于 csv 文件

    我在文件夹中排序了一堆数据 如下图所示 我需要构建一个 DataIterator 以便将数据放入神经网络模型中 当数据是图像时 我找到了很多例子来解决这个问题 使用 Keras 类图像数据生成器及其方法流自目录 但当数据是 csv 结构时则
  • 在python中打开带有重音符号的文本文件

    我尝试使用 Python 2 7 打开法语文本文件 我使用了命令 f open textfr r 但是当我使用 f read 我失去了重音字符 我明白了u J xc3 xa9tais xc3 xa0巴黎而不是J tais 巴黎等 当在lin
  • 为什么计算大整数阶乘的“分而治之”方法如此快? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何获取DataFrame.pct_change来计算每日价格数据的每月变化?

    我知道可以用periods争论 但是如何将分布在一个月内 例如交易日 的每日价格数据进行回报化呢 示例数据是 In 1 df AAPL 2009 01 02 16 00 00 90 36 2009 01 05 16 00 00 94 18
  • 使用 asyncio 时应该如何创建属性?

    在创建使用 asyncio 的类时 我发现自己处于属性 getter 需要进行 io 操作的情况 因此该函数应该是一个协程 然而 等待房产的感觉却很不寻常 这是我的意思的一个最小的例子 该代码有效并且可以运行 import asyncio
  • 将文本文件转换为 plink PED 和 MAP 格式

    我有以下数据 其中的一小部分 名为 short2 pre snp tumor txt rs987435 C G 1 1 1 0 2 rs345783 C G 0 0 1 0 0 rs955894 G T 1 1 2 2 1 rs608879
  • Django:单击按钮加载另一个模板

    我已经在 django 项目上工作了几个星期 只是玩玩以便掌握它的窍门 我有点困惑 我现在有一个名为 home html 的模板 我想知道是否可以将另一个名为 profile html 的模板设置为 home html 模板上的链接 我有一
  • 重定向到破折号中的 url

    我正在使用 dash 构建一个仪表板 每当单击特定数据点时 我都会创建一个唯一的 url 如何将用户重定向到此创建的 url 我正在使用下面给出的代码 每当有人单击任何数据点时 单击事件就会触发并执行回调函数 app layout html

随机推荐