小编bal*_*alu的帖子

Python 日志记录 - AttributeError:模块“logging”没有属性“handlers”

观察:当我注释掉时,from logging import handlers会观察到以下错误。

Error:
    file_handler =  logging.handlers.RotatingFileHandler(
AttributeError: module 'logging' has no attribute 'handlers'
Run Code Online (Sandbox Code Playgroud)

问题:如果我已经导入,logging为什么需要这样做from logging import handlers

import logging
import sys
#from logging import handlers

def LoggerDefination():
    #file_handler = logging.FileHandler(filename='..\\logs\\BasicLogger_v0.1.log', mode='a')
    file_handler =  logging.handlers.RotatingFileHandler(
        filename="..\\logs\\BasicLogger_v0.2.log",
        mode='a',
        maxBytes=20000,
        backupCount=7,
        encoding=None,
        delay=0
    )
    file_handler.setLevel(logging.DEBUG)

    stdout_handler = logging.StreamHandler(sys.stdout)
    stdout_handler.setLevel(logging.DEBUG)
    handlers = [file_handler, stdout_handler]

    logging.basicConfig(
        level=logging.DEBUG,
        format='%(asctime)s | %(module)s | %(name)s | LineNo_%(lineno)d | %(levelname)s |  %(message)s',
        handlers=handlers
    )

def fnt_test_log1():
    LoggerDefination()
    WriteLog1 = logging.getLogger('fnt_test_log1')
    #WriteLog1.propagate=False …
Run Code Online (Sandbox Code Playgroud)

python logging handler

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

如何确定模型列是否为外键?

我根据请求在数据库中动态存储信息:

// table, id and column are provided by the request
table_obj = getattr(models, table)
record = table_obj.objects.get(pk=id)

setattr(record, column, request.POST['value'])
Run Code Online (Sandbox Code Playgroud)

问题是request.POST ['value']有时包含外部记录的主键(即整数),而Django期望列的值是ForeignModel类型的对象:

无法分配"u'122":"ModelA.b"必须是"ModelB"实例.

现在,有一种优雅的方法来动态检查b是否是包含外键的列以及这些键链接到哪个模型?(这样我可以通过它的主键加载外部记录并将其分配给ModelA?)或者Django不向程序员提供这样的信息,所以我真的不得不弄脏并在外国使用isinstance()关键栏目?

python django foreign-keys

12
推荐指数
2
解决办法
5826
查看次数

我可以以某种方式与子进程共享异步队列吗?

我想使用队列将数据从父进程传递到通过其启动的子进程multiprocessing.Process.但是,由于父进程使用Python的新asyncio库,因此队列方法必须是非阻塞的.据我所知,asyncio.Queue是为了进行任务间通信而不能用于进程间通信.此外,我知道multiprocessing.Queueput_nowait()get_nowait()方法,但我实际上需要协程仍然会阻止当前任务(但不是整个过程).有没有办法创建包装put_nowait()/的协同程序get_nowait()?另一方面multiprocessing.Queue,在同一进程中运行的事件循环之后,内部使用的线程是否兼容?

如果没有,我还有其他选择吗?我知道我可以通过使用异步套接字自己实现这样的队列,但我希望我能避免这种情况......

编辑: 我也考虑使用管道而不是套接字,但它似乎asyncio不兼容multiprocessing.Pipe().更确切地说,Pipe()返回一个不是文件Connection对象的对象元组.但是,方法/方法和/都需要类似文件的对象,因此无法异步读取/写入这样的对象.相比之下,包用作管道的通常的文件类对象完全没有问题,并且可以很容易地与之结合使用.asyncio.BaseEventLoopadd_reader()add_writer()connect_read_pipe()connect_write_pipe()Connectionsubprocessasyncio

更新: 我决定进一步探索管道方法:通过检索文件描述符并将其传递给我,将Connection返回的对象转换multiprocessing.Pipe()为类文件对象.最后,我将生成的类文件对象传递给事件循环的/ .(如果有人对确切的代码感兴趣,有一些关于相关问题的邮件列表讨论.)然而,流媒体给了我一个,我没有设法解决这个问题.考虑到缺少对Windows的支持,我不会再继续这样做了.fileno()os.fdopen()connect_read_pipe()connect_write_pipe()read()OSError: [Errno 9] Bad file descriptor

python queue shared-memory multiprocessing python-asyncio

12
推荐指数
2
解决办法
5172
查看次数

关于Java内部类的两个问题(A类{B类{}})

抱歉标题不好,但我想不出更好的一个.

我有一个A类和一个B类,它是A的一个子类,就像这样:

(它实际上是否有正确的名称?是否为继承保留"子类"?)

class A {
    int i = 0;
    class B {
        int j = 1;
    }
}

class Test {
    public static void main() {
        A a = new A();
        B b = a.new B();
        A c = ??? b ??? // get "a" back
    }
}
Run Code Online (Sandbox Code Playgroud)

从B可以访问A的每个属性,因此ai和bi都返回0.现在,我想知道是否有可能从b中检索A类型的原始对象,因为b包含a包含的所有内容?简单的铸造显然不能解决问题.

第二个:

class A {

    void print() {
        System.out.println("This is class A.");
    }

    class B {
        void print() {
            // <--- How to access print() of class A (like this.A.print() or …
Run Code Online (Sandbox Code Playgroud)

java class

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

"进口包装"的目的是什么?

正如我刚刚发现的那样import package,没有通过package.module使包的模块可用.同样明显的成立from package import subpackage以及from package import *

如果我无法访问其子模块但只能访问在其中定义的对象,那么导入包的目的是什么__init__.py呢?

对我来说这from package import *会使命名空间膨胀是有意义的,但是,在其他两种方式的情况下,它不适用!我也明白加载所有子模块可能需要很长时间.但我不知道这些不必要的副作用是什么,"这应该只在明确导入子模块时发生",这是前一个链接的作者提到的.对我而言,如果我不想访问提供的对象,那么做import package[.subpackage](或from package import subpackage)就完全没有意义__init__.py.

这些不必要的副作用真的非常严重,语言实际上必须保护程序员不会造成它们吗?实际上,我认为Python更多的是"如果程序员想要这样做,那就让他去做吧." 在我的情况下,我真的想用单个语句导入所有子模块from package import subpackage,因为我需要所有这些子模块!在__init__.py文件中告诉Python 我正在谈论的子模块(所有这些!)从我的角度来看是非常麻烦的.

请赐教.:)

python import package

6
推荐指数
1
解决办法
746
查看次数

多处理:sharedctypes(RawArray、RawValue)内部如何工作,它们与 SharedMemory 相比如何以及相关问题

我一直在阅读并发性以及 SysV 和 POSIX 风格的共享内存,特别是 Python 的多处理包。现在我有几个问题,到目前为止我的 Google-fu 还没有找到答案:

\n

Q1据我从Python bugtracker 中的这个问题了解到,最近引入的multiprocessing.shared_memory.SharedMemory使用 POSIX 命名的共享内存。然而,当涉及到RawArrayRawValue中定义的类型时multiprocessing.sharedctypes,Python 文档还有很多不足之处。它们在内部是如何实施的?

\n

Q2例如, aRawArray(\'B\')和 a 的实例之间唯一的实际区别是multiprocessing.shared_memory.SharedMemory后者有名称并且也可以从不相关(可能是非 Python)的进程访问吗?他们的表现有可比性吗?

\n

Q3 Python 中多处理锁到底是如何实现的?难道他们不需要使用某种共享内存吗?文档说

\n
\n

笔记

\n

此包\xe2\x80\x99s 的某些功能需要主机操作系统上有效的共享\nsemaphore 实现。如果没有,multiprocessing.synchronize 模块将被禁用,并且尝试导入它会导致导入错误。请参阅bpo-3770了解\n更多信息。

\n
\n

(请注意,multiprocessing.Lock实际上源自multiprocessing.synchronize.Lock。)现在根据链接的问题bpo-3770Lock使用 libc\'sshm_open()创建一个命名信号量。这与工作原理相似吗SharedMemory

\n

更新:根据源代码 \xe2\x80\x93 特别是,这些行:Link 1link 2(谢谢你,bnaecker!),非 …

python multiprocessing python-multiprocessing

6
推荐指数
0
解决办法
483
查看次数

你能想象实现OO的其他任何方式都比经典的基于类的方法更好吗?

我最近一直在考虑很多关于基于类的面向对象方法的替代方案.在今天的语言中让我感到困惑的一件事是我们经常使用静态类/单例来设计单个(全局)对象,因为没有任何其他方法可以做到这一点,所以在我看来,这是一个hack而不是一个功能.另一件事是Java例如允许程序员拥有带有附加数据(全局状态)和功能的枚举,这使得它们成为我眼中的对象.

无论如何,我想知道的是你是否对编译和有效语言中面向对象的不同方法有任何想法(因此,通过原型设计创建对象可能不是一个好主意),或者,如果你不是有没有,是否有经典的OO方法中的东西也会给你带来很多麻烦.

[编辑]:只是为了说清楚.如上所述,我已经知道基于原型的编程.

oop class

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

静态成员不是自己创建类(全局)对象吗?

每当我遇到单例模式或任何静态类的实现(即具有(几乎)仅静态成员的类)时,我想知道这是不是实际上是一个黑客,因此严重滥用类和实例的原则只是为了设计单个对象,而不是设计类和创建单个实例.对我来说,它看起来像类的静态成员一般尝试向它们实际上不应该具有的类添加某种特性,而是让它们自己对象.

但是,实现这样的单个对象真的很可取吗?或者你是否完全不同地看待事物,并且不认为这些静态类或单例与实际对象有任何共同之处?

oop singleton design-patterns class static-members

4
推荐指数
1
解决办法
346
查看次数