导入glib失败:
ImportError: /usr/lib/python2.7/dist-packages/glib/_glib.so: undefined symbol: PyUnicodeUCS4_DecodeUTF8
我怎样才能解决这个问题?
Python版本是Python 2.7.3rc2.操作系统是Debian.
我在看这个网页
http://mathieu.carbou.free.fr/wiki/index.php?title=Glib_for_Win32
它告诉我,我需要运行以下命令.
./configure
make
make install
Run Code Online (Sandbox Code Playgroud)
我如何实际执行此操作以及在何处可以找到这些文件.我在我的C盘中安装了MinGW和Mysys.
该功能glib.spawn_async允许你勾3个回调这是所谓的事件上stdout,stderr以及在过程中完成.
如何使用线程或asyncio 模拟子进程的相同功能?
我对功能而不是线程/ asynio更感兴趣,但包含两者的答案将获得赏金.
这是一个玩具程序,显示我想要做的事情:
import glib
import logging
import os
import gtk
class MySpawn(object):
def __init__(self):
self._logger = logging.getLogger(self.__class__.__name__)
def execute(self, cmd, on_done, on_stdout, on_stderr):
self.pid, self.idin, self.idout, self.iderr = \
glib.spawn_async(cmd,
flags=glib.SPAWN_DO_NOT_REAP_CHILD,
standard_output=True,
standard_error=True)
fout = os.fdopen(self.idout, "r")
ferr = os.fdopen(self.iderr, "r")
glib.child_watch_add(self.pid, on_done)
glib.io_add_watch(fout, glib.IO_IN, on_stdout)
glib.io_add_watch(ferr, glib.IO_IN, on_stderr)
return self.pid
if __name__ == '__main__':
logging.basicConfig(format='%(thread)d %(levelname)s: %(message)s',
level=logging.DEBUG)
cmd = '/usr/bin/git ls-remote https://github.com/DiffSK/configobj'.split()
def on_done(pid, retval, *args): …Run Code Online (Sandbox Code Playgroud) GTK允许您设置超时g_timeout_add.就像g_signal_connect,g_timeout_add函数返回一个表示超时的id.那么,有没有办法使用id 取消超时?通过文档查看,我没有看到任何取消超时事件的方法,但我认为必须有一些方法,否则id返回值的重点是g_timeout_add什么?
那么,有没有办法取消超时事件,或者这只是需要通过设置"取消标志"手动处理的东西,可以在用户提供的超时处理函数中进行检查?
是否允许GLib用户GMainLoop在多个线程中并发运行多个实例,每个线程都运行自己的实例?我发现整个地方都有"是"和"否"的答案.我意识到这个问题之前已经在这个论坛(2011年12月)中被提出过.
但是,我能够GMainLoop在没有明显问题的情况下同时运行两个实例.我的测试代码非常简单:
GMainLoop于main() g_timeout_add g_main_loop_run g_main_context_new g_main_context_push_thread_default g_main_loop_new并为其提供新的上下文 g_source_attach. g_main_loop_run 这样做,我看到两个GMainLoop工作的实例都很好.正确调用超时回调,稍后对g_main_loop_quit的调用按预期工作.
因此,让多个GMainLoop实例同时工作似乎不是问题.但也许我还没有充分运用API来完全掌握这种情况.这个问题有明确的答案吗?
另外,如果有人关心的话,这是实际的测试代码:
#define THREAD_TIMEOUTS (20)
#define MAIN_TIMEOUS (1)
typedef struct timeout_struct
{
int i;
int max;
GMainLoop *loop;
char *name;
} TIMEOUT_STRUCT;
gboolean timeout_callback(gpointer data)
{
TIMEOUT_STRUCT *psTimeout = (TIMEOUT_STRUCT *)data;
psTimeout->i++;
if (psTimeout->i == psTimeout->max)
{
if (psTimeout->max == THREAD_TIMEOUTS)
{ …Run Code Online (Sandbox Code Playgroud) 一般来说做智能指针,如std::unique_ptr与Glib::RefPtr当另一个对象重新分配给点删除他们的对象,因为他们持有的是给定的对象(在的情况下,显然隐含的唯一指针std::unique_ptr)?
我想在Windows环境中使用Gnome GLib,使用免费的MinGW编译器在C中进行开发.问题是,我完全不知道如何编译这个库.您是否有人请说明完成此操作所需的工具以及需要遵循的说明?
有没有人知道GLib的GAsyncQueue与POSIX message_queue相对于线程间通信的相对性能?我将有许多小消息(单向和请求 - 响应类型),在Linux上用C实现(现在;可能稍后移植到Windows).我正在尝试决定使用哪一个.
我发现使用GLib更便于携带,但POSIX mq具有能够选择或轮询它们的优点.
但是,我没有找到有关其性能更好的任何信息.
我正在尝试在 Ubuntu 16.04 LTS 上安装Sharp。
我原本没有vips,所以我安装了
sudo apt-get install libvips-dev
Run Code Online (Sandbox Code Playgroud)
这修复了第一个错误,但现在我遇到了另一个错误:
In file included from ../src/common.cc:25:0:
/usr/include/vips/vips8:35:25: fatal error: glib-object.h: No such file or directory
compilation terminated.
sharp.target.mk:115: recipe for target 'Release/obj.target/sharp/src/common.o' failed
make: *** [Release/obj.target/sharp/src/common.o] Error 1
make: Leaving directory '/home/rachel/node_modules/sharp/build'
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/usr/share/node-gyp/lib/build.js:269:23)
gyp ERR! stack at emitTwo (events.js:87:13)
gyp ERR! stack at ChildProcess.emit (events.js:172:7)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12) …Run Code Online (Sandbox Code Playgroud)