Loading

python 多线程

多任务可以由多进程完成,也可以由一个进程内的多线程完成。

我们前面提到了进程是由若干线程组成的,一个进程至少有一个线程。

由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python的线程是真正的Posix Thread,而不是模拟出来的线程。

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

多线程

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
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)

### 线程锁
#!/usr/bin/env python3
# -*- conding: utf-8 -*-
import time, threading
# 假定银行存款
balance = 0
lock = threading.lock()
def change_it(n):
    #先存后取,合应该为0
    global blance
    balance = blance + n
    balance = balance - n
    
def run_thread(n):
    for i in range(10000):
    #获得取锁
    lock.acquire()
    try:
        #放心改吧:
        change_it(n)
    finallu:
        #释放锁
        lock.release()
        
t1 = threading.Thread(target=run_thread, args=(5,))
t2 = threading.Thread(target=run_thread, args=(8,))
t1.start()
t2.start()
t1.join()
t2.join()
print(balance)

使用线程锁后效果如同单线程工作,无法发挥单线程实力

posted @ 2018-07-10 17:19  摇橙子  阅读(90)  评论(0编辑  收藏  举报