智一面的面试题提供python的测试题
使用地址:http://www.gtalent.cn/exam/interview?token=99ef9b1b81c34b4e0514325e9bd3be54

一、线程
Python 中为我们提供了两个模块来创建线程。
 
_thread
threading
thread 模块已被废弃。用户可以使用 threading 模块代替。所以,在 Python 中不能再使用"thread" 模块。为了兼容性,Python 将 thread 重命名为 “_thread”。
 
相对 _thread 模块来说, threading 模块更加高级也更加常用。
 
多线程
创建多线程步骤:
 
导入线程库
创建任务函数
创建线程对象
启动线程
实例:
 
import threading,time

def task():
    for i in range(1,11):
        time.sleep(1)
        print(threading.current_thread().name,end="")
        print(":output >%d"%i)

print(time.ctime())
# 创建两个线程
pt1=threading.Thread( target=task )
pt2=threading.Thread( target=task )
# 输出线程名
print(threading.current_thread().name)
# 启动线程
pt1.start()
pt2.start()
pt1.join()
pt2.join()
print(time.ctime())

 

 
输出:
 
Sat Mar 14 16:07:12 2020
MainThread
Thread-2:output >1
Thread-1:output >1
Thread-1Thread-2:output >2
:output >2
Thread-1Thread-2:output >3
:output >3
Thread-1Thread-2:output >4
:output >4
Thread-1:output >5
Thread-2:output >5
Thread-1Thread-2:output >6
:output >6
Thread-2:output >7
Thread-1:output >7
Thread-2Thread-1:output >8
:output >8
Thread-2:output >9
Thread-1:output >9
Thread-1:output >10
Thread-2:output >10
Sat Mar 14 16:07:22 2020

 

 
 
可以看到一共用了10秒时间,两个线程都完成了自己的任务。
 
使用 threading.Thread( ) 创建线程时,可以传入六个参数,比如线程名 name,任务函数参数 args等。
 

    def __init__(self, group=None, target=None, name=None,
                 args=(), kwargs=None, *, daemon=None):

 

 
其中,如name、daemon等参数除了在创建线程时指定以外,还可以通过对象调用函数设置。 pt.setName()、pt.setDaemon()。
 
线程同步
在多线程中会常会发生多个线程同时访问同一个资源的情况,造成线程不安全。而我们要求线程对临界资源的操作是必须是原子操作,因此我们可以通过线程锁来实现线程安全。
 
使用 Thread 对象的 Lock 和 Rlock 可以实现简单的线程同步,这两个对象都有 acquire 方法和 release 方法进行加锁和解锁。
 
lock=threading.RLock() # 创建一个锁