python学习作业笔记十二

本文通过实例演示了Python中多线程的应用,包括线程的基本创建、运行与管理,以及如何利用锁解决线程间的数据同步问题,并介绍了ThreadLocal的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time     : 2018/8/20 17:32
# @Author   : 


# 多线程 有两个库_thread和threading,_thread是低级模块,threading是高级模块,对_thread进行了封装。绝大多数情况下,我们只需要使用threading这个高级模块。
import time, threading


# 新线程执行的代码
def loop():
    print('thread %s is running...' % threading.current_thread().name)
    n = 0
    while n < 5:
        n = n + 1
        print('thread %s >>> %s ' % (threading.current_thread().name, n))
        time.sleep(1)
    print('thread %s done...' % threading.current_thread().name)


if __name__ == '__main__':
    t = threading.Thread(target=loop, name='LoopThread')
    t.start()
    t.join()
    print('Thread %s ended.' % threading.current_thread().name)
#
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time     : 2018/8/20 17:37
# @Author   : 


# 多线程和多进程最大的不同在于,多进程中,同一个变量,各自有一份拷贝存在于每个进程中,互不影响,而多线程中,
# 所有变量都由所有线程共享,所以,任何一个变量都可以被任何一个线程修改,因此,线程之间共享数据最大的危险在
# 于多个线程同时改一个变量,把内容给改乱了。
import threading
import random
import time

blance = 0
lock = threading.Lock()  # 锁


def run_thread1(n):
    for i in range(10):
        # 先获取锁
        chang_it(n)


def run_thread2(n):
    for i in range(10):
        # 先获取锁
        lock.acquire()
        try:
            # 放心改变值
            chang_it(i)
        finally:
            lock.release()  # 释放锁


def chang_it(n):
    global blance
    blance = blance + n
    time.sleep(random.random())
    blance = blance - 10
    blance = blance - n
    time.sleep(random.random())
    blance = blance + 10


if __name__ == "__main__":
    t1 = threading.Thread(target=run_thread1,args=(4,))
    t2 = threading.Thread(target=run_thread1,args=(8,))
    t1.start()
    t2.start()
    t1.join()
    t2.join()
    print(blance)

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time     : 2018/8/21 10:52
# @Author   : 

# threadLocal
import threading

localConnection = threading.local()


def thread_running(connectio):
    localConnection.connection = connectio
    insertStu(connectio)


def insertStu(connection):
    print("插入学生 调用连接 %s" % connection)


# 在数据库中 当前线程都有一个数据库连接 当发生错误的时候可以回滚
if __name__ == '__main__':
    t1 = threading.Thread(target=thread_running, args=('连接一',))
    t2 = threading.Thread(target=thread_running, args=('连接二',))
    t1.start()
    t2.start()
    t1.join()
    t2.join()
    print("所有学生都已经插入")

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值