所以我一直在想如何使线程安全,原因是每当我运行我创建的程序只是为了好玩时。我意识到控制台发了很多垃圾邮件,以至于无法一一打印出来。
我所做的基本上是,我使用的列表列表并没有什么特别的,只是说了一系列不同的水果
list = ['apple','banana','kiwi'....]
然后我有一个叫做data
的东西,基本上是使用记录器打印出来的。
logger.log(data)
完整程序看起来像
def sendData(list, data):
logger.log(data)
def main():
...
...
...
data_list.append((list[i], data))
for index, data in data_list:
threading.Thread(target=sendData, args=(list, data)).start()
因此基本上,正如我们所看到的,这可能是许多线程同时运行,这将导致交互,使控制台打印出很多错误,所以现在的问题是:
如何将其转变为一种线程安全的?每个线程开始的那种睡眠会神奇吗?
答案 0 :(得分:3)
您可能想研究threading.Lock()
,它可以用于防止多个线程同时执行输出任务,从而在控制台中混合单词:
def sendData(list, data):
with lock:
logger.log(data)
lock = threading.Lock()
def main():
...
...
...
data_list.append((list[i], data))
for index, data in data_list:
threading.Thread(target=sendData, args=(list, data)).start()
这将防止多个线程同时运行“ with”中的代码。
当线程X进入“ with”块时,它将获得锁定。如果另一个线程试图声明它(进入“ with”块),它将不得不等到线程X释放锁为止。