我将发送一个c++数组到python函数,numpy array然后再返回另一个numpy array.在查阅了numpy文档和其他一些线程并调整代码后,最后代码正在运行,但我想知道这段代码是否以最佳方式编写,考虑到:
c++和之间不必要地复制数组numpy (python).C++代码:
// python_embed.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
#include "Python.h"
#include "numpy/arrayobject.h"
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
Py_SetProgramName(argv[0]);
Py_Initialize();
import_array()
// Build the 2D array
PyObject *pArgs, *pReturn, *pModule, *pFunc;
PyArrayObject *np_ret, *np_arg;
const int SIZE{ 10 };
npy_intp dims[2]{SIZE, SIZE};
const int ND{ 2 }; …Run Code Online (Sandbox Code Playgroud) 我有一个使用SQLite(版本3.7.2)来存储数据的应用程序.我在多个线程之间共享一个SQLite连接,它从同一个SQLite数据库中写入和读取.SQLite使用DSQLITE_THREADSAFE = 1编译,这意味着SQLite处于序列化模式.
引用SQLite文档
序列化:在序列化模式下,SQLite可以被多个线程安全地使用而没有任何限制.
相反,SQLite Wiki条目说
不要在多个线程中同时使用相同的数据库连接
我尝试了一个示例应用程序,它生成了数百个线程,并共享一个SQLite句柄来读写,哪个工作正常.
那么SQLite wiki条目是否过时,或者SQLite可能无法使用相同的连接同时处理来自不同线程的读写操作?
我正在用C++编写一个使用旧版C API的库.我的库的客户端可以指定回调函数,它通过我的库间接调用,通过C API调用.这意味着必须处理客户端回调中的所有异常.
我的问题是:如何在边界的一侧捕获异常,并在C API边界重新生成后重新抛出它,并且执行返回到C++域,以便客户端代码可以处理异常?
从我的阅读中看,由于存在守护进程,dbus性能应该比其他消息传递ipc机制慢两倍.
在讨论这样的问题时,Linux IPC技术使用某些人提到了性能问题.除了两倍慢的因素外,您是否看到性能问题?您是否看到阻止dbus在嵌入式系统中使用的问题?
据我所知,dbus是否适用于小消息.如果需要传递大量数据,其中一个解决方案是将数据放入共享内存或堆中,然后使用dbus进行通知.根据所讨论的其他ipc机制正在考虑的是:信号,匿名管道,命名管道或FIFO,SysV消息队列,POSIX消息队列,SysV共享内存,POSIX共享内存,SysV信号量,POSIX信号量,FUTEX锁,文件 - 支持和匿名共享内存使用mmap,UNIX域套接字,Netlink套接字,网络套接字,Inotify机制,FUSE子系统,D-Bus子系统.
我应该提一个列出要求的问题(尽管它以apache为中心):
然而,关于性能的另一个问题,所以提到的技术来提高性能.考虑到这一切,我想在嵌入式系统中使用dbus时应该有更少的问题或缺点.
我将Lua嵌入到带有16Mhz 32位ARM7TDMI处理器和256Kb RAM的无eabi设备的程序中(是的,那是GBA).目前它正在完美运行(谢谢StackOveflow用户,回答我的问题),做简单的任务,但我可以做些什么来提高整体效率呢?这是我的一些想法:
目前我将我的Lua代码存储为常量字符串数组(单独的ROM最高为32Mb,因此它有助于释放RAM).当我想运行它时,我只需将此字符串推送到Lua堆栈并"填充"它.但据我所知,Lua将该代码构建为RAM中的字节代码.我认为这也可能是大Lua文件的一些问题.任何方式 - 预编译该字节码并将其保存到常量容器中?
哪个asm命令集更适合运行Lua-THUMB或ARM?
编辑:也许,将香草Lua改为LuaJIT?据我所知,LuaJIT有许多代码组装线(这使得它的可移植性降低),是否有机会成功构建旧的ARM7处理器?
出于学习目的,如何使用TensorFlow C API对此Python示例进行编码?
import tensorflow as tf
hello = tf.constant("hello TensorFlow!")
sess=tf.Session()
print(sess.run(hello))
Run Code Online (Sandbox Code Playgroud)
我这样试过:
#include <string.h>
#include <iostream.h>
#include "c_api.h"
int main( int argc, char ** argv )
{
TF_Graph * graph = TF_NewGraph();
TF_SessionOptions * options = TF_NewSessionOptions();
TF_Status * status = TF_NewStatus();
TF_Session * session = TF_NewSession( graph, options, status );
char hello[] = "Hello TensorFlow!";
TF_Tensor * tensor = TF_AllocateTensor( TF_STRING, 0, 0, 8 + TF_StringEncodedSize( strlen( hello ) ) );
TF_OperationDescription * operationDescription = TF_NewOperation( graph, …Run Code Online (Sandbox Code Playgroud) 我有一个 DBus 服务器,它公开了一个需要大量时间才能完成的方法(大约 3 分钟)。客户端对此方法执行同步调用。
问题是,正好 25 秒后,客户端抛出错误,因为“没有收到回复”。
不幸的是,我无法更改客户端,因此我无法使调用异步,因为它应该是。
我试图在我的服务器配置中使用这一行:
<limit name = "reply_timeout">240000</limit>
Run Code Online (Sandbox Code Playgroud)
但情况没有改变。
任何的想法?
我正在尝试将 c++ 中的 c 样式数组转换为 numpy 数组,并在尝试使用“PyArray_SimpleNewFromData”函数时遇到问题。原来我需要打电话
import_array()
Run Code Online (Sandbox Code Playgroud)
虽然我不明白如何调用这个函数。每当我尝试调用它时,我都会收到我无法理解的编译器错误。例如编写以下简单脚本:
#include <Python.h>
#include <numpy/arrayobject.h>
int main(){
Py_Initialize();
import_array();
Py_Finalize();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
产生编译器错误
错误:返回语句没有值,在返回 'int' 的函数中 [-fpermissive] import_array();
我看了几个例子,例如:
https://codereview.stackexchange.com/questions/92266/sending-ac-array-to-python-numpy-and-back
编译多个模块时出现 import_array() 的 Numpy/CAPI 错误
但无论我尝试什么(即使看似遵循这些示例),我似乎都会遇到上面的编译器错误。我错过了什么或做错了什么?关于如何调用 import_array() 函数的解释将非常受欢迎。谢谢您的帮助!
更新:
我正在使用 python 2.7.11,我认为它可能与这里讨论的内容有关:
https://github.com/clemenscorny/brisk/issues/3
但我仍然不知道如何解决它。
我通过以下方式在 Python 中的 tf 2.2.0 中保存了 keras 模型:
model.save('model', save_format='tf')
Run Code Online (Sandbox Code Playgroud)
它在“model”目录中给了我一个saved_model.pb。我想通过 c_api 进行推理,并且使用以下函数的代码: TF_LoadSessionFromSavedModel 工作正常。
int main() {
TF_Graph *Graph = TF_NewGraph();
TF_Status *Status = TF_NewStatus();
TF_SessionOptions *SessionOpts = TF_NewSessionOptions();
TF_Buffer *RunOpts = NULL;
const char *saved_model_dir = "model/";
const char *tags = "serve";
int ntags = 1;
TF_Session *Session = TF_LoadSessionFromSavedModel(SessionOpts, RunOpts, saved_model_dir, &tags, ntags, Graph, NULL, Status);
if (TF_GetCode(Status) == TF_OK)
{
printf("TF_LoadSessionFromSavedModel OK\n");
}
else
{
printf("%s", TF_Message(Status));
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我想通过 TF_GraphImportGraphDef 直接使用“model”目录中的 saving_model.pb,则会出现“Invalid GraphDef”错误: …
我在python代码中,需要检查一些值PY_SSIZE_T_MAX(在python的C-API中定义)。
我可以PY_SSIZE_T_MAX直接获得价值吗?如果没有,由于python的行为,有没有办法推断它?还是我可以安全地从中推断出来sizeof(ctypes.c_ssize_t)(我正在考虑的价值:)2**(8 * sizeof(c_ssize_t) - 1)?