03-04 16—20


16.threading.local的作用?

# 答案:
為每個線程創建一個獨立的空間,使得線程對自己的空間中的數據進行操作(數據隔離)。
import threading
from threading import local
import time
 
obj = local()
 
 
def task(i):
    obj.xxxxx = i
    time.sleep(2)
    print(obj.xxxxx,i)
 
for i in range(10):  #開啟了10個線程
    t = threading.Thread(target=task,args=(i,))
    t.start()

17.進程之間如何進行通信?

# 答案:
python提供了多種進程通信的方式,主要Queue和Pipe這兩種方式,Queue用於多個進程間實現通信,Pipe是兩個進程的通信。

# Queue
from multiprocessing import Process, Queue
import os,time,random

#寫數據進程執行的代碼
def proc_write(q,urls):
    print 'Process is write....'
    for url in urls:
        q.put(url)
        print 'put %s to queue... ' %url
        time.sleep(random.random())

#讀數據進程的代碼
def proc_read(q):
    print('Process is reading...')
    while True:
        url = q.get(True)
        print('Get %s from queue' %url)

if __name__ == '__main__':
    #父進程創建Queue,並傳給各個子進程
    q = Queue()
    proc_write1 = Process(target=proc_write,args=(q,['url_1','url_2','url_3']))
    proc_write2 = Process(target=proc_write,args=(q,['url_4','url_5','url_6']))
    proc_reader = Process(target=proc_read,args=(q,))
    #啟動子進程,寫入
    proc_write1.start()
    proc_write2.start()

    proc_reader.start()
    #等待proc_write1結束
    proc_write1.join()
    proc_write2.join()
    #proc_raader進程是死循環,強制結束
    proc_reader.terminate()




# PIPE
import multiprocessing
import os,time,random

#寫數據進程執行的代碼
def proc_send(pipe,urls):
    #print 'Process is write....'
    for url in urls:

        print 'Process is send :%s' %url
        pipe.send(url)
        time.sleep(random.random())

#讀數據進程的代碼
def proc_recv(pipe):
    while True:
        print('Process rev:%s' %pipe.recv())
        time.sleep(random.random())

if __name__ == '__main__':
    #父進程創建pipe,並傳給各個子進程
    pipe = multiprocessing.Pipe()
    p1 = multiprocessing.Process(target=proc_send,args=(pipe[0],['url_'+str(i) for i in range(10) ]))
    p2 = multiprocessing.Process(target=proc_recv,args=(pipe[1],))
    #啟動子進程,寫入
    p1.start()
    p2.start()

    p1.join()
    p2.terminate()

18.什么是並發和並行?

# 答案:
# 並發:同一時刻只能處理一個任務,但可以交替處理多個任務。(一個處理器同時處理多個任務)
# 並行:同一時刻可以處理多個任務。(多個處理器或者是多核的處理器同時處理多個不同的任務)
# 類比:並發是一個人同時吃三個饅頭,而並行是三個人同時吃三個饅頭。 

19.同步和異步,阻塞和非阻塞的區別?

# 答案:
'''
同步:執行一個操作之后,需要主動等待返回結果;
異步:執行一個操作之后,不需要主動等待返回結果,若接收到結果通知,再回來執行剛才沒執行完的操作。
同步和異步關心的問題是:要不要主動等待結果。

阻塞:在執行一個操作時,不能做其他操作;
非阻塞:在執行一個操作時,能做其他操作。
阻塞和非阻塞關心的問題是:能不能做其他操作。
'''

20.路由器和交換機的區別?

# 答案:
'''
1:交換機:是負責內網里面的數據傳遞(arp協議)根據MAC地址尋址。
   路由器:在網絡層,路由器根據路由表,尋找該ip的網段。
2:路由器可以把一個IP分配給很多個主機使用,這些主機對外只表現出一個IP。
   交換機可以把很多主機連起來,這些主機對外各有各的IP。
3:交換機是做端口擴展的,也就是讓局域網可以連進來更多的電腦。
   路由器是用來做網絡連接,也就是連接不同的網絡。
'''


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM