Python学习笔记393

简介: Python 多线程

以下代码可以直观展示加锁和不加锁时,线程运行的顺序。

#!/usr/bin/python

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


import threading

import time

classMyThread(threading .Thread):

   def __init__(self,delay,name,count):

       threading .Thread.__init__(self)

       self.delay=delay

       self.name=name

       self.count=count

   def run (self):

       print('starting'+self.name )

       threadLock.acquire()

       # 获得锁,成功获得锁定后返回True

       # 可选的timeout参数不填时将一直阻塞直到获得锁定

       # 否则超时后将返回False

       print_time(self.delay ,self.name ,self.count)

       # 释放锁

       threadLock.release()

def print_time(delay,name,count):

   while count :

       time.sleep(delay )

       print("{}:{}".format(name, time.ctime(time.time())))

       count  -=1

threadLock=threading.Lock()

#创建容器(列表)

threads=[]

# 创建新线程

thread1=MyThread(1,'thread-1',3)

thread2=MyThread(2,'thread-2',3)

# 开启新线程

thread1.start()

thread2 .start()

# 添加线程到线程容器(列表)

threads .append(thread1 )

threads .append(thread2 )

# 等待所有线程完成

for t in threads :

   t.join()

print('Exiting Main Thrid')

加锁时:

startingthread-1startingthread-2

thread-1:FriOct2500:44:392019thread-1:FriOct2500:44:402019thread-1:FriOct2500:44:412019thread-2:FriOct2500:44:432019thread-2:FriOct2500:44:452019thread-2:FriOct2500:44:472019ExitingMainThrid

不加锁时:

startingthread-1startingthread-2

thread-1:FriOct2500:48:562019thread-2:FriOct2500:48:572019thread-1:FriOct2500:48:572019thread-1:FriOct2500:48:582019thread-2:FriOct2500:48:592019thread-2:FriOct2500:49:012019

ExitingMainThrid

相关文章
|
3月前
|
网络协议 Java Linux
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
本文介绍了PyAV库,它是FFmpeg的Python绑定,提供了底层库的全部功能和控制。文章详细讲解了PyAV的安装过程,包括在Windows、Linux和ARM平台上的安装步骤,以及安装中可能遇到的错误和解决方法。此外,还解释了时间戳的概念,包括RTP、NTP、PTS和DTS,并提供了Python代码示例,展示如何获取RTSP流中的各种时间戳。最后,文章还提供了一些附录,包括Python通过NTP同步获取时间的方法和使用PyAV访问网络视频流的技巧。
565 4
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
|
3月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
185 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
3月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
202 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
3月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
76 1
|
3月前
|
Ubuntu Linux Python
Ubuntu学习笔记(六):ubuntu切换Anaconda和系统自带Python
本文介绍了在Ubuntu系统中切换Anaconda和系统自带Python的方法。方法1涉及编辑~/.bashrc和/etc/profile文件,更新Anaconda的路径。方法2提供了详细的步骤指导,帮助用户在Anaconda和系统自带Python之间进行切换。
157 1
|
3月前
|
索引 Python
Python学习笔记编程小哥令狐~持续更新、、、(上)
Python学习笔记编程小哥令狐~持续更新、、、(上)
56 2
|
3月前
|
存储 Python
Python学习笔记编程小哥令狐~持续更新、、、 (下)
Python学习笔记编程小哥令狐~持续更新、、、 (下)
42 1
|
3月前
|
存储 Python
【免费分享编程笔记】Python学习笔记(二)
【免费分享编程笔记】Python学习笔记(二)
49 0
【免费分享编程笔记】Python学习笔记(二)
|
3月前
|
Java 编译器 Go
Python学习笔记--- day01计算机基础和环境搭建(一)
Python学习笔记--- day01计算机基础和环境搭建(一)
52 2
|
3月前
|
程序员 编译器 Python
Python学习笔记--- day01计算机基础和环境搭建(二)
Python学习笔记--- day01计算机基础和环境搭建(二)
54 1