2017-06-03 73 views
0

我有一个多线程使用的函数。由于其性质,此功能应该只能一次调用一次。多个线程在同一时间调用该函数可能会很糟糕。一次只能由一个线程调用的方法

如果函数正在被线程使用,其他线程就不得不等待它自由。

我的背景不是编码,所以我不确定,但我相信这在行话中被称为“锁定”?我尝试了谷歌搜索,但没有找到一个Python3的简单例子。

一个简化的情况:

def critical_function(): 
    # How do I "lock" this function? 
    print('critical operation that should only be run once at a time') 

def threaded_function(): 
    while True: 
     # doing stuff and then 
     critical_function() 

for i in range(0, 10): 
    threading.Thread(target=threaded_function).start() 
+0

所以你要当第二个线程试图调用该函数发生了什么?它应该抛出一个错误?它是否应该等待第一个线程完成? –

+0

@Rawing - 我的问题的第一段的最后一行'如果函数正在被线程使用,其他线程就不得不等待它被释放。'我将把它放在自己的路线上以使它更清晰。 – Juicy

+0

看到这个,http://effbot.org/zone/thread-synchronization.htm – Sush

回答

2
from threading import Lock 
critical_function_lock = Lock() 

def critical_function(): 
    with critical_function_lock: 
     # How do I "lock" this function? 
     print('critical operation that should only be run once at a time')