1. 程式人生 > >python學習作業筆記十二

python學習作業筆記十二

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time     : 2018/8/20 17:32
# @Author   : 


# 多執行緒 有兩個庫_thread和threading,_thread是低階模組,threading是高階模組,對_thread進行了封裝。絕大多數情況下,我們只需要使用threading這個高階模組。
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 done...' % threading.current_thread().name)


if __name__ == '__main__':
    t = threading.Thread(target=loop, name='LoopThread')
    t.start()
    t.join()
    print('Thread %s ended.' % threading.current_thread().name)
#
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time     : 2018/8/20 17:37
# @Author   : 


# 多執行緒和多程序最大的不同在於,多程序中,同一個變數,各自有一份拷貝存在於每個程序中,互不影響,而多執行緒中,
# 所有變數都由所有執行緒共享,所以,任何一個變數都可以被任何一個執行緒修改,因此,執行緒之間共享資料最大的危險在
# 於多個執行緒同時改一個變數,把內容給改亂了。
import threading
import random
import time

blance = 0
lock = threading.Lock()  # 鎖


def run_thread1(n):
    for i in range(10):
        # 先獲取鎖
        chang_it(n)


def run_thread2(n):
    for i in range(10):
        # 先獲取鎖
        lock.acquire()
        try:
            # 放心改變值
            chang_it(i)
        finally:
            lock.release()  # 釋放鎖


def chang_it(n):
    global blance
    blance = blance + n
    time.sleep(random.random())
    blance = blance - 10
    blance = blance - n
    time.sleep(random.random())
    blance = blance + 10


if __name__ == "__main__":
    t1 = threading.Thread(target=run_thread1,args=(4,))
    t2 = threading.Thread(target=run_thread1,args=(8,))
    t1.start()
    t2.start()
    t1.join()
    t2.join()
    print(blance)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time     : 2018/8/21 10:52
# @Author   : 

# threadLocal
import threading

localConnection = threading.local()


def thread_running(connectio):
    localConnection.connection = connectio
    insertStu(connectio)


def insertStu(connection):
    print("插入學生 呼叫連線 %s" % connection)


# 在資料庫中 當前執行緒都有一個數據庫連線 當發生錯誤的時候可以回滾
if __name__ == '__main__':
    t1 = threading.Thread(target=thread_running, args=('連線一',))
    t2 = threading.Thread(target=thread_running, args=('連線二',))
    t1.start()
    t2.start()
    t1.join()
    t2.join()
    print("所有學生都已經插入")