小编tdi*_*ihp的帖子

Python多处理日志记录 - 为什么multiprocessing.get_logger

一段时间以来,我一直在努力处理多处理日志,原因有很多.

我的一个原因是,为什么另一个get_logger.

当然我已经看到了这个问题,似乎multiprocessing.get_logger返回的记录器做了一些"进程共享锁"魔术,使日志处理顺利进行.

所以,今天我研究了Python 2.7的多处理代码(/multiprocessing/util.py),发现这个记录器只是一个普通的logging.Logger,并且几乎没有任何魔法.

这是Python文档中的描述,就在get_logger函数之前:

可以使用一些日志记录支持.但请注意,日志记录包不使用进程共享锁,因此可能(取决于处理程序类型)来自不同进程的消息混淆.

因此,当您使用错误的日志记录处理程序时,即使是get_logger记录器也可能出错?我用过一个程序使用get_logger来记录一段时间.它将日志打印到StreamHandler并且(似乎)永远不会混淆.

现在我的理论是:

  1. multiprocessing.get_logger根本不执行进程共享锁
  2. StreamHandler适用于多处理,但FileHandler不支持
  3. 这个get_logger记录器的主要目的是跟踪进程的生命周期,并提供一个易于获取且随时可用的记录器,它已经记录了进程的名称/ id类型的东西

这是问题:

我的理论是对的吗?

如何/为什么/何时使用此get_logger?

python logging multiprocessing

10
推荐指数
2
解决办法
3344
查看次数

在代码中实现可选的记录器

我想在函数中实现一个可选的记录器.就像是:

def foo(arg1, arg2, arg3, logger=None):
    logger = logger or (lambda *x: None)

    ...
    self.logger.debug("The connection is lost.")
Run Code Online (Sandbox Code Playgroud)

我想在记录器存在的情况下进行日志记录.否则,记录器的调试将不起作用.

基本上,实现它的简单方法是将每个调试语句嵌套在一个if logger块中,但是当有许多调试语句时它似乎很乱.

python logging

8
推荐指数
2
解决办法
3241
查看次数

如何实现具有多个开关的工厂?

我想实现一个用于创建对象的工厂函数.我的对象模板如下所示:

template <typename TA, typename TB>
struct MyImpl : public MyInterface
{
    // content
};
Run Code Online (Sandbox Code Playgroud)

我的工厂是这样的:

MyInterface* factory(char ta, char tb)
{
    if(ta == 'c' && tb == 'c')
    {
        return new MyImpl<char, char>();
    }
    if(ta == 'c' && tb == 's')
    {
        return new MyImpl<char, short>();
    }
    if(ta == 's' && tb == 'c')
    {
        return new MyImpl<short, char>();
    }
    // and so on ....
}
Run Code Online (Sandbox Code Playgroud)

工厂函数必须接受非静态char数据(ta,tb),因为它无法在编译时确定,我认为这是该工厂的重点.事实上,tatb从文件(或网络)阅读.

我想要一个更简单的解决方案来避免烦人的2级开关.

我认为我的问题类似于how-would-one-write-a-meta-if-else-if-in-c,除了我不能使用静态参数. …

c++ templates factory

7
推荐指数
1
解决办法
370
查看次数

g ++"因为以下虚函数是纯粹的"与抽象基类

这是我的示例代码,它产生错误:

struct Impl
{
  int data_size_;
  int find(int var){return 0;}
  int get(int rowid){return 0;}
};

class Container
{
public:
  Container() {}
  virtual ~Container() {}
  virtual int get_size() = 0;
  virtual int get(int rowid) = 0;
};


class SortedContainer : virtual public Container {
public:
  virtual int find(int var) = 0;
};

class ContainerImpl : public Container
{
protected:
  Impl impl_;
public:
  int get_size() {return impl_.data_size_;}
  int get(int rowid) {return impl_.get(rowid);}
};

class SortedContainerImpl
  : public SortedContainer, public ContainerImpl
{
private: …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism virtual-functions diamond-problem

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

使用现有的线性编程工具查找所有替代基本解决方案

我必须找到一些微小的线性编程问题的所有基本解决方案。

这是一个示例(采用lp_solve格式):

max: x1 + x2;
x1 + x2 <= 1;
x1 <= 0.8;
x2 <= 0.8;
Run Code Online (Sandbox Code Playgroud)

所有2种基本解决方案:

  • x1 = 0.2,x2 = 0.8
  • x1 = 0.8,x2 = 0.2

当然,有一种寻找替代解决方案的方法,但是我真的更喜欢使用现有的库,而不是精心设计自己的单纯形代码。

我使用Python作为编程语言,希望lp_solveGLPK的C API中有某种方法可以做到这一点。

谢谢。

linear-programming lpsolve glpk

5
推荐指数
1
解决办法
869
查看次数

在jmeter httprequest路径中使用csv参数

我想使用CSV数据集配置来修改HTTP请求的路径.

  • 我的CSV文件:
    120,120
    121,121
    
  • 我的CSV变量名称:paraa, parab.
  • 我的http请求路径:/my/path/with/?{paraa}/?{parab}/.

我试过但我失败了.

反正有没有工作呢?

jmeter load-testing

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

将所有SQLite数据库与不同的表合并

是否有一种廉价/快速的方法将SQLite数据库文件与不同的表合并?

例如:

  • a.db 只有桌子 a
  • b.db 只有桌子 b
  • ...

我想这些合并成一个abcd.db包含所有a,b,c,和d.

我想我想要的是这样一个神奇的剧本:

merge_script a.db b.db c.db d.db -o abcd.db
Run Code Online (Sandbox Code Playgroud)

我已经注意到这个提示和另一个技巧和ATTACH技巧,它将所有记录插入"主"数据库,但是我可以在"主"数据库中没有表时执行此操作吗?

UPDATE

我使用SQLIte数据库文件作为简单的存储容器.

在大多数情况下,我将每种类型的数据(不同于表名)存储在一个文件中,然后将它们合并到"目标"数据库中.

但是有些类型的数据应该在同一个表名中.如果使用sqlite3 .dump,那么tablename就会发生冲突.

然而,这种.dump方法非常简单,我只是做一些解决方法并使用它.

python sqlite merge

3
推荐指数
1
解决办法
1769
查看次数