python中對執行緒的支援的確不夠,不過據說python有足夠完備的非同步網路框架模組,希望日後能學習到,這裡就簡單的對python中的執行緒做個總結
threading庫可用來在單獨的執行緒中執行任意的python可呼叫物件。儘管此模組對執行緒相關操作的支援不夠,但是我們還是能夠用簡單的執行緒來處理i/o操作,以減低程式響應時間.
from threading import threadimport time
def countdown(n):
while n > 0:
print('t-minus:', n)
n -= 1
t = thread(target=countdown, args=(10,))
t.start() # 開啟執行緒
time.sleep(2)
if t.is_alive() is true:
print("停止執行緒...")
t._stop() # 停止執行緒
from queue import queuequeue例項會被所有的執行緒共享,同時它又擁有了所有所需要的鎖,因此它們可以安全的在任意多的執行緒中共享。在這裡要注意,不要再多執行緒中使用除了put(),get()方法之外的queue類的方法,因為在多執行緒環境中這是不可靠的!對於簡單的小型的執行緒中資料的通訊,可以使用佇列來處理。如果是大型的資料需要互動通訊,python提供了相關的模組你可以使用,具體的u need baidu.from threading import thread
class kill:
def terminate(self, t):
if t.isalive is true:
t._stop()
def product(out_q):
for i in range(5):
out_q.put(i)
def consumer(in_q):
for i in range(5):
print(in_q.get())
q = queue()
t1 = thread(target=consumer, args=(q,))
t2 = thread(target=product, args=(q,))
t1.start()
t2.start()
k = kill() # 查詢執行緒是否終止,防止阻塞...
k.terminate(t1)
k.terminate(t2)
所謂協程,其實就是在單執行緒的環境下的yield程式。
from collections import deque在這裡說下自己這段時間使用python的心得,python的確不錯,但效能也是為人詬病,一開始學習python,我也是去做一些比較炫的程式,最起碼聽起來逼格高,比如使用python的自然語言處理來做情感分析以及最熱的爬蟲程式,還有做炫的資料分析圖表。漸漸地,我就放下了那些,因為程式的重點不在那些,只要你會點基本的語法,看得懂官方文件就能夠做出來,而程式**的重點在效能,優化。最大程度的寫出功能最完善,效能最優,結構最優美的程式,其實這就有點像是政治老師常說的"文化軟實力",程式中的"軟實力"應該是在程式中嵌入最適合的設計模式,做最完備的程式優化,採用最省效能的資料結構等.def countdown(n):
while n > 0:
print("t-minus", n)
yield # 返回之後下次直接從這裡執行...相當於c#裡面得yield return .
n -= 1
print("this is countdown!!!")
def countup(n):
x = 0
while x < n:
print("counting up", x)
yield
x += 1
class taskscheduler:
def __init__(self):
self._task_queue = deque()
def new_task(self, task):
def run(self):
while self._task_queue:
task = self._task_queue.popleft()
try:
next(task)
except stopiteration:
pass
sche = taskscheduler()
sche.new_task(countdown(10))
sche.new_task(countdown(5))
sche.new_task(countup(15))
sche.run()
簡單執行緒實驗
名稱 簡單執行緒實驗 說明 執行緒是輕量級的程序。我們可以通過建立執行緒來達到較小的開銷 比執行緒來說 執行緒的使用主要幾個api函式,在此簡單介紹幾個 1 函式定義int pthread create pthread t thread,pthread attr t attr,void start ...
python 簡單執行緒池例項
coding utf 8 import urllib2 import time import socket from datetime import datetime from thread pool import import queue,threading,sys from threading ...
單執行緒 非同步協程的簡單爬蟲模型
event loop 事件迴圈,相當於乙個無限迴圈 不清楚迴圈多少次 我們可以把一些特殊函式註冊 放置 到這個事件迴圈上,當滿足某些條件的時候,函式就會被迴圈執行。程式是按照設定的順序從頭執行到尾,執行的次數也是完全按照設定。當在編寫非同步程式時,必然其中有部分程式的執行耗時是比較久的,需要先讓出當...