相关疑难解决方法(0)

发电机是否有线程?

我有一个多线程程序,我创建一个生成器函数,然后将其传递给新线程.我希望它在本质上是共享/全局的,因此每个线程都可以从生成器获取下一个值.

使用这样的生成器是安全的,还是会遇到从多个线程访问共享生成器的问题/条件?

如果没有,是否有更好的方法来解决问题?我需要一些循环遍历列表的东西,并为任何线程调用它生成下一个值.

python multithreading generator thread-safety

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

创建一个包装类来调用现有函数的pre和post函数?

我想创建一个包装另一个类的类,这样当一个函数在包装类中运行时,也会运行一个pre和post函数.我希望包装器类可以在不修改的情况下使用任何类.

例如,如果我有这个课程.

class Simple(object):
    def one(self):
        print "one"

    def two(self,two):
        print "two" + two

    def three(self):
        print "three"
Run Code Online (Sandbox Code Playgroud)

我可以像这样使用它......

number = Simple()
number.one()
number.two("2")
Run Code Online (Sandbox Code Playgroud)

到目前为止我写了这个包装类...

class Wrapper(object):
    def __init__(self,wrapped_class):
        self.wrapped_class = wrapped_class()

    def __getattr__(self,attr):
        return self.wrapped_class.__getattribute__(attr)

    def pre():
        print "pre"

    def post():
        print "post"
Run Code Online (Sandbox Code Playgroud)

我可以这样称呼......

number = Wrapper(Simple)
number.one()
number.two("2")
Run Code Online (Sandbox Code Playgroud)

除了改变第一行之外,可以使用与上面相同的内容.

我想要发生的是当通过包装类调用一个函数时,包装类中的pre函数被调用,然后是包装类中的所需函数,然后是post函数.我希望能够在不更改包装类的情况下执行此操作,也无需更改函数的调用方式,只需更改创建类实例的语法.例如number = Simple()vs number = Wrapper(Simple)

python

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

标签 统计

python ×2

generator ×1

multithreading ×1

thread-safety ×1