标签: cpython

CPython或IronPython?

您将使用什么来建立全新的跨平台GUI应用程序CPython或IronPython?

那么
- 许可证/自由
- 开发
- - 文档
- 编辑器
- 工具
- 库
- 性能
- 可移植性

你能用哪一个做得最好?
- 网络
- 数据库
- GUI
- 系统
- 多线程/处理

python ironpython cpython

7
推荐指数
1
解决办法
4739
查看次数

OpenCV:Python界面的内存泄漏,但C版本没有

我在这里问,因为到目前为止我还没有得到OpenCV开发人员的任何帮助.我把问题简化为一个非常简单的测试用例,所以可能有CPython背景的人都可以在这里提供帮助.

这个C代码不泄漏:

int main() {
    while(true) {
        int hist_size[] = {40};
        float range[] = {0.0f,255.0f};
        float* ranges[] = {range};
        CvHistogram* hist = cvCreateHist(1, hist_size, CV_HIST_ARRAY, ranges, 1);
        cvReleaseHist(&hist);
    }
}
Run Code Online (Sandbox Code Playgroud)

这个Python代码确实泄漏:

while True: cv.CreateHist([40], cv.CV_HIST_ARRAY, [[0,255]], 1)
Run Code Online (Sandbox Code Playgroud)

我搜索了CPython代码(OpenCVs当前的SVN中继代码),发现了这个:

struct cvhistogram_t {
  PyObject_HEAD
  CvHistogram h;
  PyObject *bins;
};
Run Code Online (Sandbox Code Playgroud)

...

/* cvhistogram */

static void cvhistogram_dealloc(PyObject *self)
{
  cvhistogram_t *cvh = (cvhistogram_t*)self;
  Py_DECREF(cvh->bins);
  PyObject_Del(self);
}

static PyTypeObject cvhistogram_Type = {
  PyObject_HEAD_INIT(&PyType_Type)
  0,                                      /*size*/
  MODULESTR".cvhistogram",                /*name*/
  sizeof(cvhistogram_t),                  /*basicsize*/
};

static PyObject *cvhistogram_getbins(cvhistogram_t *cvh) …
Run Code Online (Sandbox Code Playgroud)

python debugging opencv memory-leaks cpython

7
推荐指数
1
解决办法
824
查看次数

python内置函数是否总是C扩展(即使在PyPy上)?

我正在研究Python的文档API我正在调用Python Docs,我注意到我的静态分析套件几乎无法访问所有内置函数,因为它们几乎都是C模块.据我所知,我不能想到这条规则有任何例外.

我的问题的第一部分很简单,是否内置模块预先假定是CPython中的C扩展?

假设可能是这种情况,我编译了一个新的pypy运行时,并尝试使用我的项目来反对pypy的内置函数.我惊讶地发现这也不起作用.

为什么PyPy模块不是AST对象,如果它们是纯Python?这是PyPy在JIT上托管的副作用吗?

python pypy cpython abstract-syntax-tree built-in

7
推荐指数
1
解决办法
255
查看次数

当rootfs为只读且/ tmp为noexec时,Python ctypes分段错误

我正在尝试将Python用于运行Linux的Arm处理器上的嵌入式应用程序(从X86/Linux交叉编译的CPython 2.7.3).在我开始确保设备安全以防止篡改之前,它确实运行良好.首先,我将rootfs设置为只读,以防止rootfs因突然断电而损坏,并防止未经授权的用户修改我们的主代码.仍然,python和我们的ctypes库继续正常工作./ tmp目录被映射到tmpfs(ramdrive).强化的另一个步骤是在tmpfs分区上设置noexec标志,以防止用户以某种方式上传任何可能导致本地root利用的代码.设置了这两个选项后,导入ctypes会立即产生段错误:

root@ATX4:~# python                                 
Python 2.7.3 (default, Jul 16 2013, 17:15:57) 
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ctypes
Segmentation fault
Run Code Online (Sandbox Code Playgroud)

有趣的是,下面的任何更改都允许ctypes正常工作:

  1. 将rootfs重新安装为读写
  2. 在没有noexec的情况下重新安装tmpfs
  3. 重新安装/ dev/shm没有noexec

知道是什么导致了这个吗?现在,我已经在没有noexec的情况下进行了/ dev/shm mount,并且只是将其限制为尽可能少的用户.

python ctypes cpython segmentation-fault python-2.7

7
推荐指数
1
解决办法
432
查看次数

为什么这个Python脚本在多个内核上的运行速度比单个内核慢4倍

我试图了解CPython的GIL如何工作以及CPython 2.7.x和CPython 3.4.x中GIL之间的区别是什么.我正在使用此代码进行基准测试:

from __future__ import print_function

import argparse
import resource
import sys
import threading
import time


def countdown(n):
    while n > 0:
        n -= 1


def get_time():
    stats = resource.getrusage(resource.RUSAGE_SELF)
    total_cpu_time = stats.ru_utime + stats.ru_stime
    return time.time(), total_cpu_time, stats.ru_utime, stats.ru_stime


def get_time_diff(start_time, end_time):
    return tuple((end-start) for start, end in zip(start_time, end_time))


def main(total_cycles, max_threads, no_headers=False):
    header = ("%4s %8s %8s %8s %8s %8s %8s %8s %8s" %
              ("#t", "seq_r", "seq_c", "seq_u", "seq_s",
               "par_r", "par_c", "par_u", "par_s"))
    row_format = ("%(threads)4d …
Run Code Online (Sandbox Code Playgroud)

python multithreading cpython gil

7
推荐指数
1
解决办法
1286
查看次数

为什么单个python进程的cpu使用率可以超过100%?

由于GIL,我认为多线程python进程一次只能运行一个线程,因此cpu使用率不能超过100%.

但我发现下面的代码可以占用顶部950%的CPU使用率.

import threading
import time

def f():
    while 1:
        pass


for i in range(10):
    t = threading.Thread(target=f)
    t.setDaemon(True)
    t.start()

time.sleep(60)
Run Code Online (Sandbox Code Playgroud)

这与Python解释器使用高达130%的CPU的问题不同.怎么可能?.在那个问题中,OP表示他正在进行I/O密集型负载测试,这可能会释放GIL.但在我的程序中,没有I/O操作.

测试在CPython 2.6.6上运行.

python multithreading cpython

7
推荐指数
1
解决办法
2023
查看次数

Python2词典中的非单调内存消耗

有人可以解释CPython 2.7中字典的非单调内存使用吗?

>>> import sys
>>> sys.getsizeof({})
280
>>> sys.getsizeof({'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5})
280
>>> sys.getsizeof({'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, 'six': 6})
1048
>>> sys.getsizeof({'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, 'six': 6, 'seven': 7})
1048
>>> sys.getsizeof({'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, 'six': 6, 'seven': 7, 'e
ight': 8})
664
>>> sys.getsizeof({'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, …
Run Code Online (Sandbox Code Playgroud)

python memory cpython python-2.7 python-internals

7
推荐指数
1
解决办法
113
查看次数

SqlAlchemy记录"SystemError:错误返回无异常设置"

我目前正在开发一个Web应用程序,它使用SqlAlchemy Flask和Marshmallow的组合将SQLite数据序列化为前端的JSON.我已经在多个场合使用过这种设置,但是,这次我的控制台不断被垃圾邮件发送,并出现以下错误:

    Exception ignored in: <generator object surface_selectables at 0x13b399888>
Traceback (most recent call last):
  File "/Users/luke/Documents/Projects/project/venv/lib/python3.6/site-packages/sqlalchemy/sql/util.py", line 231, in surface_selectables
    yield elem
SystemError: error return without exception set
Exception ignored in: <generator object _visitor_iterator at 0x13b399888>
Traceback (most recent call last):
  File "/Users/luke/Documents/Projects/project/venv/lib/python3.6/site-packages/sqlalchemy/sql/visitors.py", line 150, in _visitor_iterator
    yield v
SystemError: error return without exception set
Exception ignored in: <generator object _visitor_iterator at 0x13b399888>
Traceback (most recent call last):
  File "/Users/luke/Documents/Projects/project/venv/lib/python3.6/site-packages/sqlalchemy/sql/visitors.py", line 150, in _visitor_iterator
    yield v
SystemError: error return …
Run Code Online (Sandbox Code Playgroud)

python sqlite sqlalchemy cpython

7
推荐指数
0
解决办法
694
查看次数

如何在Python中实现三元运算符

我知道条件表达式(或三元运算符)在Python中是懒惰的.它们代表条件执行而不是条件选择.换句话说,以下只有一个a或被b评估:

c = a if condition else b
Run Code Online (Sandbox Code Playgroud)

我有兴趣知道它是如何在内部实现的.Python是否转换if为如下所示的语句,如果是,则转换发生在什么阶段?

if condition:
    c = a
else:
    c = b
Run Code Online (Sandbox Code Playgroud)

或者三元运算符实际上是一个独立且独立的表达式,完全单独定义?如果是这样,我可以访问条件表达式的CPython代码吗?

我看这解释以下什么三元运营商的做法,但他们没有明确如何得到实施:


编辑:您可以假设CPython参考实现.

python cpython ternary-operator python-3.x python-internals

7
推荐指数
1
解决办法
454
查看次数

为什么float .__ repr__返回与等效格式选项相比不同的表示形式?

为了查看repr(x)CPython中float的工作方式,我检查了以下代码float_repr:

buf = PyOS_double_to_string(PyFloat_AS_DOUBLE(v),
                            'r', 0,
                            Py_DTSF_ADD_DOT_0,
                            NULL);
Run Code Online (Sandbox Code Playgroud)

这会调用PyOS_double_to_string格式代码'r',该格式代码似乎已转换为'g'精度设置为17的格式代码:

precision = 17;
format_code = 'g';
Run Code Online (Sandbox Code Playgroud)

因此,我希望repr(x)并f'{x:.17g}'返回相同的表示形式。但是,情况似乎并非如此:

>>> repr(1.1)
'1.1'
>>> f'{1.1:.17g}'
'1.1000000000000001'
>>> 
>>> repr(1.225)
'1.225'
>>> f'{1.225:.17g}'
'1.2250000000000001'
Run Code Online (Sandbox Code Playgroud)

我知道,repr仅需要返回与重构内存中所表示的相同对象相同数量的数字,因此'1.1'显然足以取回该数字,1.1但我想知道这与(内部使用)与(内部使用)有何不同(或为什么) ).17g格式选项。

(Python 3.7.3)

python floating-point cpython python-3.x

7
推荐指数
1
解决办法
99
查看次数