0
点赞
收藏
分享

微信扫一扫

极客编程python入门-多线程


多线程


Python的标准库提供了两个模块:​_thread​​threading​​_thread​是低级模块,​threading​是高级模块,对​_thread​进行了封装。绝大多数情况下,我们只需要使用​threading​这个高级模块。


启动一个线程就是把一个函数传入并创建Thread实例,然后调用start()开始执行:


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 ended.' % threading.current_thread().name)

print('thread %s is running...' % threading.current_thread().name)
t = threading.Thread(target=loop, name='LoopThread')
t.start()
t.join()
print('thread %s ended.' % threading.current_thread().name)


执行结果如下:


极客编程python入门-多线程_多进程


由于任何进程默认就会启动一个线程,我们把该线程称为主线程,主线程又可以启动新的线程,Python的​threading​模块有个​current_thread()​函数,它永远返回当前线程的实例。主线程实例的名字叫​MainThread​


Lock


多线程和多进程最大的不同在于,多进程中,同一个变量,各自有一份拷贝存在于每个进程中,互不影响,而多线程中,所有变量都由所有线程共享


创建一个锁就是通过threading.Lock()来实现:


balance = 0
lock = threading.Lock()

def run_thread(n):
for i in range(100000):
# 先要获取锁:
lock.acquire()
try:
# 放心地改吧:
change_it(n)
finally:
# 改完了一定要释放锁:
lock.release()


获得锁的线程用完后一定要释放锁,否则那些苦苦等待锁的线程将永远等待下去,成为死线程。所以我们用try...finally来确保锁一定会被释放。


小结


多线程编程,模型复杂,容易发生冲突,必须用锁加以隔离,同时,又要小心死锁的发生。

举报

相关推荐

0 条评论