小编Pio*_*ost的帖子

如何让virtualenv在Ubuntu上使用dist-packages?

我知道virtualenv,如果--no-site-packages在创建新的虚拟环境时没有传递参数,将链接/usr/local/lib/python2.7/site-packages(对于Python 2.7)的包与新创建的虚拟环境.在Ubuntu 12.04 LTS上,我有三个可以安装Python 2.7软件包的位置(使用默认的,Ubuntu提供的Python 2.7安装):

  1. /usr/lib/python2.7/dist-packages:这有我的全局安装ipython,scipy,numpy,matplotlib - 如果它们不能通过scipy堆栈获得,我会发现单独安装(以及它们的所有依赖)会很困难和耗时.
  2. /usr/local/lib/python2.7/site-packages:这是空的,我认为它将在Ubuntu上保持这种方式,除非我从源代码安装包.
  3. /usr/local/lib/python2.7/dist-packages:这对天文学有非常重要的本地包装,特别是与PyRAF,STScI等相关的包装,单独安装非常困难和耗时.

请注意,/usr/lib/python2.7/site-packages我的系统上不存在全局目录.另请注意,我的ipython,scipy等全局安装让我可以即时使用这些软件包,而无需每次都使用/激活虚拟环境.

当然,我现在想使用virtualenv在我的用户主目录中创建一个虚拟环境,我将为未来的项目提供/激活.但是,我希望这个虚拟环境在创建时链接/复制上面列表中位置(1)和(3)中的所有包.这样做的主要原因是我不想经历这个pip install过程(如果可能的话)为这个(也许是其他的)虚拟环境重新安装ipython,scipy,astro-packages等.

这是我的问题:

  1. 有没有办法让我指定virtualenv我希望它将这两个dist-packages目录中的包链接/复制到将来创建的虚拟环境中?
  2. 当我最终在两个dist-packages目录中更新我的scipy,ipython等全局安装时,这还会更新/更改我的虚拟环境使用的软件包(以及它在virtualenv创建期间最初获得的软件包)吗?
  3. 如果我在Ubuntu上从源代码安装软件包,它会进入/usr/local/lib/python2.7/dist-packages,还是/usr/local/lib/python2.7/site-packages

在此先感谢您的帮助!

python environment ubuntu packages virtualenv

16
推荐指数
2
解决办法
1万
查看次数

将Qt与STL和Boost混合 - 是否有任何桥梁可以轻松实现?

是否有任何桥梁可以使Qt与STL和Boost混合尽可能无缝且简单?

这是混合Qt和Boost的后续,其中没有给出如何实现这一点的具体答案.

c++ qt boost stl

15
推荐指数
1
解决办法
8366
查看次数

boost :: bind和类成员函数

考虑以下示例.

#include <iostream>
#include <algorithm>
#include <vector>

#include <boost/bind.hpp>

void
func(int e, int x) {
    std::cerr << "x is " << x << std::endl;
    std::cerr << "e is " << e << std::endl;
}

struct foo {
    std::vector<int> v;

    void calc(int x) {
        std::for_each(v.begin(), v.end(),
            boost::bind(func, _1, x));
    }

    void func2(int e, int x) {
        std::cerr << "x is " << x << std::endl;
        std::cerr << "e is " << e << std::endl;
    }

};

int
main()
{
    foo f; …
Run Code Online (Sandbox Code Playgroud)

c++ boost-bind

15
推荐指数
1
解决办法
2万
查看次数

线程安全的C++堆栈

我是C++的新手,我正在编写一个多线程的应用程序,不同的编写者会将对象推入堆栈,读者将它们从堆栈中拉出(或者至少将指针推到对象上).

是否有内置于C++中的结构可以在不添加锁定代码等的情况下处理此问题?如果没有,Boost库怎么样?

编辑:

你好.感谢最初的好答案.我想我认为这可能是内置的一个原因是我纯粹在x86空间思考并且认为指针的PUSH/POP应该是指令级别的原子动作.

我不确定我最初的预感是否正确,但我想在所有平台上都不一定如此.虽然如果在x86上运行,你是否会将原子PUSH和POP发送到堆栈中,如果是这样,这实际上是否使它无锁?

c++ stack multithreading boost thread-safety

14
推荐指数
2
解决办法
2万
查看次数

Linux和gcc 4中的C++ new运算符线程安全性

不久,我将开始使用共享内存开发并行版本的网格细化算法.

该大学的一位教授指出,我们必须非常小心线程安全,因为编译器和stl都不是线程感知的.

我搜索了这个问题,答案取决于编译器(有些尝试有点线程感知)和平台(如果编译器使用的系统调用是否是线程安全的).

那么,在linux中,gcc 4编译器为new运算符生成线程安全的代码?

如果没有,解决这个问题的最佳方法是什么?也许锁定每个呼叫到新的运营商?

c++ linux gcc thread-safety

14
推荐指数
2
解决办法
1万
查看次数

使用QtWebKit时如何知道何时加载网页?

二者QWebFrameQWebPage具有void loadFinished(bool ok)可被用于检测当网页完全加载信号.问题是当网页异步加载某些内容时(ajax).在这种情况下如何知道页面何时完全加载?

ajax qt asynchronous qtwebkit qwebpage

14
推荐指数
1
解决办法
9553
查看次数

完全线程安全的shared_ptr实现

有人知道完全线程安全的shared_ptr实现吗?例如,boost实现shared_ptr对于目标(引用计数)是线程安全的,并且对于同时shared_ptr实例读取也是安全的,但不是写入或读/写.

(参见Boost docs,例3,4和5).

是否存在对shared_ptr实例完全线程安全的shared_ptr实现?

提升文档的人说:

shared_ptr对象提供与内置类型相同的线程安全级别.

但是如果你比较一个普通的指针(内置类型)smart_ptr,那么同时写一个普通的指针是线程安全的,但同时写入a smart_ptr不是.

编辑:我的意思是x86架构上的无锁实现.

EDIT2:这种智能指针的一个示例用例是有许多工作线程,它们使用当前工作项更新全局shared_ptr,并使用监视器线程获取工作项的随机样本.shared-ptr将拥有该工作项,直到为其分配了另一个工作项指针(从而销毁了以前的工作项).监视器将获得工作项的所有权(从而防止工作项被销毁),方法是将其分配给自己的shared-ptr.它可以通过XCHG和手动删除来完成,但如果共享ptr可以做到这一点会很好.

另一个例子是全局shared-ptr拥有"处理器",由某个线程分配,并由其他一些线程使用.当"用户"线程看到处理器shard-ptr为NULL时,它使用一些替代逻辑来进行处理.如果它不是NULL,它会通过将处理器分配给它自己的shared-ptr来防止处理器被破坏.

c++ boost thread-safety shared-ptr

13
推荐指数
1
解决办法
2万
查看次数

如何手动将选项插入boost.Program_options?

我有一个使用Boost.Program_options来存储和管理其配置选项的应用程序.我们目前正在远离配置文件并使用数据库加载配置.我编写了一个API,通过主机名和实例名从数据库中读取配置选项.(很酷!)但是,据我所知,没有办法手动将这些选项插入到boost Program_options中.有没有人用过这个,有什么想法吗?来自boost的文档似乎表明在该映射中获取内容的唯一方法是使用store函数,该函数可以从命令行或配置文件中读取(不是我想要的).基本上寻找一种手动将DB读取值插入到地图中的方法.

c++ configuration boost-program-options

13
推荐指数
1
解决办法
2923
查看次数

.NET加密类的线程安全性?

我有一个高级目标,即创建一个静态实用程序类,它封装了我的.NET应用程序的加密.在里面,我想尽量减少不必要的对象创作.

我的问题是:在.NET Framework中实现对称加密的类的线程安全性什么? 具体而言System.Security.Cryptography.RijndaelManaged,ICryptoTransform它产生的类型.

例如,在我的类构造函数中,我可以简单地按照以下行执行某些操作吗?

static MyUtility()
{
    using (RijndaelManaged rm = new RijndaelManaged())
    {
        MyUtility.EncryptorTransform = rm.CreateEncryptor(MyUtility.MyKey, MyUtility.MyIV);
        MyUtility.DecryptorTransform = rm.CreateDecryptor(MyUtility.MyKey, MyUtility.MyIV);
    }
}
Run Code Online (Sandbox Code Playgroud)

在这个类中存在Key和IV是安全的问题,这个示例块提出了许多其他问题:

  1. 我可以一遍又一遍地重复使用EncryptorTransform和DecryptorTransform吗?这些*.CanReuseTransform*.CanTransformMultipleBlocks属性意味着"是",但是我应该注意哪些警告?

  2. 因为RijndaelManaged实现IDisposable我倾向于把它放在一个using块中,特别是因为它可能与外部操作系统级别的lib相关联.有什么警告,因为我保持ICryptoTransform周围的物体?

  3. 可能是最重要的问题,在高度多线程的环境中,我会遇到ICryptoTransform在线程之间共享对象的问题吗?

  4. 如果对#3的回答是它不是线程安全的,那么当我使用这些ICryptoTransform对象时,我是否会因锁定而导致严重的性能下降?(取决于负载我想.)

  5. RijndaelManaged每次只是简单地实例化它会更高效吗?或者存储一个RijndaelManagednew RijndaelManaged().CreateEncryptor(...)每次生成?

我希望那里的某些人知道这些工作是如何工作的,或者是在类似实现方面遇到的问题.我发现很多这些性能和线程相关的问题通常都没有表现出来,直到有相当大的负载.

谢谢!

c# encryption cryptography thread-safety rijndaelmanaged

13
推荐指数
1
解决办法
3179
查看次数

初始化静态库中嵌入的qt资源

我有下一个情况:我需要在独立静态库中创建小部件,然后将其与最终应用程序链接(visual c ++ 9.0,qt 4.5).此静态窗口小部件库包含一些资源(图标),并包含多个.cpp文件(每个文件包含独立窗口小部件).据我所知,我必须初始化qt资源系统,如果我在静态库中使用它们(资源),调用"Q_INIT_RESOURCE(resource_file_name)".我用下一个代码(在静态库中的每个.cpp文件中)解决了这个问题:


#include <QAbstractButton>

namespace {
struct StaticLibInitializer
{
    StaticLibInitializer()
    {
        Q_INIT_RESOURCE(qtwidgets_custom_resources);
    }
};
StaticLibInitializer staticLibInitializer;
} 

// ... widget code ....

我没有使用第一种方法,而是使用初始化代码在静态库项目中创建了单独的init.cpp文件(以避免在每个.cpp文件中包含初始化代码),但这不起作用.

为什么这不起作用?

这种使用StaticLibInitializer的方法在各种编译器和平台之间是否安全且可移植?

c++ qt static-libraries static-order-fiasco

13
推荐指数
2
解决办法
1万
查看次数