ad

《零基础Python 从入门到精通》_让你学得轻松_12.2.3 线程同步

admin 136 2023-10-25

【摘要】 本书摘自《零基础Python 从入门到精通》一书中第12章,第2.3节,编者是壹零快学。

12.2.3 线程同步

《零基础Python 从入门到精通》_让你学得轻松_12.2.3 线程同步

如果有多个线程共同修改或者操作同一个对象或者数据,就有可能会发生一些意想不到的事情,例如:

动手写12.2.5

基 础 Python 从 入 门 到 精 通

我们可以尝试多次运行这个例子,每次执行这个例子,程序在屏幕上输出的结果都不太相 同, 而且不同的线程输出的内容有许多都叠加在一起,无法区分,这就是前面所说的多线程的不确定性。为了保证数据的正确性,我们需要将多个线程进行同步。

标准库threading中有Lock对象可以实现简单的线程同步(threading.Lock其实调用的就是_thread. allocate_lock获取Lock对象)。多线程的优势在于可以同时运行多个任务,但是当线程需要处理同 一个资源时,就需要考虑数据不同步的问题了(print对应的其实就是stdout)。

动手写12.2.6

#!/usr/bin/env python

# -*- coding: UTF-8 -*-

import time

import threading

thread_lock = None

class MyThread(threading.Thread):

def__init__(self, thread_id):

super(MyThread, self).__init__()

self.thread_id = thread_id

def run(self):

# 锁定

thread_lock.acquire()

for i in range(3):

print("Thread %d\t printing! times: %d" % (self.thread_id, i))

# 释放

thread_lock.release()

time.sleep(1)

# 锁定

thread_lock.acquire()

for i in range(3):

print("Thread %d\t printing! times: %d" % (self.thread_id, i))

# 释放

thread_lock.release()

def main():

print("Main thread start")

threads = []

基 础 Python 从 入 门 到 精 通

第 12 章 多线程与并行

我们可以从执行结果中看到,加了锁之后的线程不再像之前的例子那么不可控制了。每次执 行都会得到相同的结果,并且例子中的五个线程是“同时”在执行的。当子线程运行到thread_lock. acquire()的时候,程序会判断thread_lock是否处于锁定状态,如果是锁定状态,线程就会在这一行 阻塞,直到锁被释放为止。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:阅读《基于Python语言的软件测试技术》_打开新的知识大门_2.3.4. 编写用户手册
下一篇:《零基础Python 从入门到精通》_让你学得轻松_4.1 通用序列操作
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×