程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

python面试题(7)

python杂谈(0)

标签  

python面试题(7)

python电子书(56)

日期归档  

(python版)创建两个线程,其中一个输出1-52,另外一个输出A-Z。输出格式要求:12A 34B 56C 78D 依次类推

发布于2019-08-22 19:35     阅读(1338)     评论(0)     点赞(10)     收藏(1)


1. 代码实现

import threading
import time

def f1():
	"""
	执行f1的时候需要锁住lock1,因此此前lock1必须处于已解锁状态,否则阻塞
	只有当执行完毕一次f1之后,才能解锁lock2,f2才能继续执行
	"""
    for i in range(1, 52, 2):
    	# 锁住lock1,如果此时lock1不是处于未上锁状态,则等待lock1解锁之后才能往下进行
        lock1.acquire()
        print(i, end='')
        print(i+1, end='')
        # 解锁lock2
        lock2.release()

def f2():
	"""
	执行f2的时候需要锁住lock2,因此此前lock2必须处于已解锁状态,否则阻塞
	只有当执行完毕一次f2之后,才能解锁lock1,f1才能继续执行
	"""
    for i in range(26):
    	# 锁住lock2,如果此时lock2不是处于未上锁状态,则等待lock2解锁之后才能往下进行
        lock2.acquire()
        print(chr(i+ord('A')))
        lock1.release()

if __name__ == '__main__':
	# 建立两个线程锁
	lock1 = threading.Lock()
	lock2 = threading.Lock()
	# 创建两个线程
	f1_thread = threading.Thread(target=f1)
	f2_thread = threading.Thread(target=f2)
	# 先锁住lock2,也就是先不让f2执行
	lock2.acquire()
	# 当f1执行1次之后,lock2才会解锁f2才能执行
	f1_thread.start()
	f2_thread.start()

# 输出
12A
34B
56C
78D
910E
1112F
1314G
1516H
1718I
1920J
2122K
2324L
2526M
2728N
2930O
3132P
3334Q
3536R
3738S
3940T
4142U
4344V
4546W
4748X
4950Y
5152Z

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68

2. 总结

本题主要考察就是线程锁的问题。

另外简单介绍下chr()函数:

用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的ascii字符。
语法

chr(i)
i – 可以是10进制也可以是16进制的形式的数字。
返回值是当前整数对应的ascii字符。

示例:

>>>print(chr(0x30), chr(0x31), chr(0x61))   # 十六进制
0 1 a
>>> print(chr(48), chr(49), chr(97))         # 十进制
0 1 a
  • 1
  • 2
  • 3
  • 4

ord()函数:

ord()函数是chr()函数的逆向。
ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。

语法

ord©
c – ascii字符。
返回值是对应的十进制整数。

示例:

>>>ord('a')
97
>>> ord('b')
98
>>> ord('c')
99
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6


所属网站分类: 技术文章 > 博客

作者:熊猫烧香

链接:https://www.pythonheidong.com/blog/article/53451/3c056421ae559c42474b/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

10 0
收藏该文
已收藏

评论内容:(最多支持255个字符)