gpt4 book ai didi

Python使用functools实现注解同步方法

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Python使用functools实现注解同步方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

在 Python 中没有类似 Java 中使用的 synchronized 关键字来同步方法,因此在 Python 中要实现同步方法,通常我们是使用 threading.Lock() 来实现。在进入函数的地方获取锁,出函数的时候释放锁,这样实现代码看起好非常不好看。另外网上也有人给出了其它几种实现方式,但看起来都不美气.

今天我在做项目的时候突然想到是不是可以通过 functools 来实现通过注解来标注方法为同步方法.

首先要求自己的类中有一个锁对象并且在类初始化的时候初始化这个锁对象,比如:

?
1
2
3
4
5
class MyWorker( object ):
   def __init__( self ):
     self .lock = threading.Lock()
     ...
   ...

然后创建一个 synchronized 函数,这个函数装饰具体对象的具体方法,将方法放到获取/释放锁之间来运行,如下 。

?
1
2
3
4
5
6
def synchronized(func):
   @functools .wraps(func)
   def wrapper( self , * args, * * kwargs):
     with self .lock:
       return func( self , * args, * * kwargs)
   return wrapper

最后在需要使用同步的方法上使用 @synchronized 来标准方法是同步方法,比如:

?
1
2
3
@synchronized
def test( self ):
   ...

下面是一个完整例子,仅供参考:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import threading
import functools
import time
def synchronized(func):
   @functools .wraps(func)
   def wrapper( self , * args, * * kwargs):
     with self .lock:
       return func( self , * args, * * kwargs)
   return wrapper
class MyWorker( object ):
   def __init__( self ):
     self .lock = threading.Lock()
     self .idx = 0
   @synchronized
   def test1( self ):
     for i in range ( 1 , 11 ):
       self .idx = self .idx + 1
       print "Test1: " + str ( self .idx)
       time.sleep( 1 )
   @synchronized
   def test2( self ):
     for i in range ( 1 , 11 ):
       self .idx = self .idx + 1
       print "Test2: " + str ( self .idx)
       time.sleep( 1 )
   @synchronized
   def test3( self ):
     for i in range ( 1 , 11 ):
       self .idx = self .idx + 1
       print "Test3: " + str ( self .idx)
       time.sleep( 1 )
worker = MyWorker()
threading.Thread(target = worker.test1).start()
threading.Thread(target = worker.test2).start()
threading.Thread(target = worker.test3).start()

总结 。

以上所述是小编给大家介绍的Python使用functools实现注解同步方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。

原文链接:http://blog.csdn.net/kongxx/article/details/79266719 。

最后此篇关于Python使用functools实现注解同步方法的文章就讲到这里了,如果你想了解更多关于Python使用functools实现注解同步方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com