我知道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安装):
/usr/lib/python2.7/dist-packages:这有我的全局安装ipython,scipy,numpy,matplotlib - 如果它们不能通过scipy堆栈获得,我会发现单独安装(以及它们的所有依赖)会很困难和耗时./usr/local/lib/python2.7/site-packages:这是空的,我认为它将在Ubuntu上保持这种方式,除非我从源代码安装包./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等.
这是我的问题:
dist-packages目录中的包链接/复制到将来创建的虚拟环境中?dist-packages目录中更新我的scipy,ipython等全局安装时,这还会更新/更改我的虚拟环境使用的软件包(以及它在virtualenv创建期间最初获得的软件包)吗?/usr/local/lib/python2.7/dist-packages,还是/usr/local/lib/python2.7/site-packages?在此先感谢您的帮助!
是否有任何桥梁可以使Qt与STL和Boost混合尽可能无缝且简单?
这是混合Qt和Boost的后续,其中没有给出如何实现这一点的具体答案.
考虑以下示例.
#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++的新手,我正在编写一个多线程的应用程序,不同的编写者会将对象推入堆栈,读者将它们从堆栈中拉出(或者至少将指针推到对象上).
是否有内置于C++中的结构可以在不添加锁定代码等的情况下处理此问题?如果没有,Boost库怎么样?
编辑:
你好.感谢最初的好答案.我想我认为这可能是内置的一个原因是我纯粹在x86空间思考并且认为指针的PUSH/POP应该是指令级别的原子动作.
我不确定我最初的预感是否正确,但我想在所有平台上都不一定如此.虽然如果在x86上运行,你是否会将原子PUSH和POP发送到堆栈中,如果是这样,这实际上是否使它无锁?
不久,我将开始使用共享内存开发并行版本的网格细化算法.
该大学的一位教授指出,我们必须非常小心线程安全,因为编译器和stl都不是线程感知的.
我搜索了这个问题,答案取决于编译器(有些尝试有点线程感知)和平台(如果编译器使用的系统调用是否是线程安全的).
那么,在linux中,gcc 4编译器为new运算符生成线程安全的代码?
如果没有,解决这个问题的最佳方法是什么?也许锁定每个呼叫到新的运营商?
二者QWebFrame并QWebPage具有void loadFinished(bool ok)可被用于检测当网页完全加载信号.问题是当网页异步加载某些内容时(ajax).在这种情况下如何知道页面何时完全加载?
有人知道完全线程安全的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来防止处理器被破坏.
我有一个使用Boost.Program_options来存储和管理其配置选项的应用程序.我们目前正在远离配置文件并使用数据库加载配置.我编写了一个API,通过主机名和实例名从数据库中读取配置选项.(很酷!)但是,据我所知,没有办法手动将这些选项插入到boost Program_options中.有没有人用过这个,有什么想法吗?来自boost的文档似乎表明在该映射中获取内容的唯一方法是使用store函数,该函数可以从命令行或配置文件中读取(不是我想要的).基本上寻找一种手动将DB读取值插入到地图中的方法.
我有一个高级目标,即创建一个静态实用程序类,它封装了我的.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是安全的问题,这个示例块提出了许多其他问题:
我可以一遍又一遍地重复使用EncryptorTransform和DecryptorTransform吗?这些*.CanReuseTransform和*.CanTransformMultipleBlocks属性意味着"是",但是我应该注意哪些警告?
因为RijndaelManaged实现IDisposable我倾向于把它放在一个using块中,特别是因为它可能与外部操作系统级别的lib相关联.有什么警告,因为我保持ICryptoTransform周围的物体?
可能是最重要的问题,在高度多线程的环境中,我会遇到ICryptoTransform在线程之间共享对象的问题吗?
如果对#3的回答是它不是线程安全的,那么当我使用这些ICryptoTransform对象时,我是否会因锁定而导致严重的性能下降?(取决于负载我想.)
RijndaelManaged每次只是简单地实例化它会更高效吗?或者存储一个RijndaelManaged并new RijndaelManaged().CreateEncryptor(...)每次生成?
我希望那里的某些人知道这些工作是如何工作的,或者是在类似实现方面遇到的问题.我发现很多这些性能和线程相关的问题通常都没有表现出来,直到有相当大的负载.
谢谢!
我有下一个情况:我需要在独立静态库中创建小部件,然后将其与最终应用程序链接(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++ ×7
boost ×3
qt ×3
ajax ×1
asynchronous ×1
boost-bind ×1
c# ×1
cryptography ×1
encryption ×1
environment ×1
gcc ×1
linux ×1
packages ×1
python ×1
qtwebkit ×1
qwebpage ×1
shared-ptr ×1
stack ×1
stl ×1
ubuntu ×1
virtualenv ×1