传递多处理.将对象值为 ctype 函数?
Passing multiprocessing.Value object into a ctype function?
我正在使用一个python函数,该函数从python的多处理库中获取传递给它的Value对象,并且需要使用ctype函数对其进行修改。问题是我找不到一个好的方法,我不确定是否可以将 Value 对象传递到 ctype 函数中,以便修改值。
我的 python 代码如下所示:
#main.py
import ctypes, glob
from multiprocessing import Value
libfile = glob.glob('build/*/mod_func*.so')[0]
mylib = ctypes.CDLL(libfile)
test_value = Value("i", -99)
mylib.mod_func.argtypes = [ctypes.c_int]
print(test_value.value)
mylib.mod_func(test_value.value)
print(test_value.value)
我正在构建的C++代码如下所示:
//testcode.cpp
extern "C"
void mod_func(int &val)
{
val = 10;
}
我使用命令python setup.py build
构建了C++代码,其中 setup.py 如下所示:
from setuptools import setup, Extension
setup(
ext_modules=[Extension('mod_func', ['testcode.cpp'],),],
)
当我运行main.py
时,我得到的输出是:
-99
Segmentation fault (core dumped)
该错误可能是由于我试图将Value.value
传递给我的 ctype 函数引起的,但我不确定我还能做什么。我不能只使用 ctype 函数返回的值,因为我的主要 python 代码将在线程中运行并在 ctype 函数完成执行之前的某个时间点强制终止,所以我想迭代更新传递给 ctype 函数的值,该值可以在线程终止时查看。
有什么想法吗?
好吧,我设法通过使用回调函数找到了我正在寻找的功能。
更新的 Python 代码:
#main.py
import ctypes, glob
from multiprocessing import Value
libfile = glob.glob('build/*/mod_func*.so')[0]
mylib = ctypes.CDLL(libfile)
test_value = Value("i", -99)
print("Before:", test_value.value)
@ctypes.CFUNCTYPE(None, ctypes.c_int)
def callback(new_val):
test_value.value = new_val
mylib.mod_func(callback, 10)
print("After:", test_value.value)
更新C++代码:
extern "C"
void mod_func(void (*f)(int), int val)
{
f(val);
}
输出:
Before: -99
After: 10
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 传递多处理.将对象值为 ctype 函数?
- C++:如何在没有ctype函数的情况下将小写转换为upercase和viceversa
- Python ctype 直接调用具有原始偏移量的函数
- "ctype" 抛<locale>出 std::bad_cast 的函数
- 转换为ctype,但我不知道这些函数在做什么