python簡單執行緒和協程學習

2022-02-18 07:53:13 字數 2450 閱讀 4611

python中對執行緒的支援的確不夠,不過據說python有足夠完備的非同步網路框架模組,希望日後能學習到,這裡就簡單的對python中的執行緒做個總結

threading庫可用來在單獨的執行緒中執行任意的python可呼叫物件。儘管此模組對執行緒相關操作的支援不夠,但是我們還是能夠用簡單的執行緒來處理i/o操作,以減低程式響應時間.

from threading import thread

import 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 queue

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)

queue例項會被所有的執行緒共享,同時它又擁有了所有所需要的鎖,因此它們可以安全的在任意多的執行緒中共享。在這裡要注意,不要再多執行緒中使用除了put(),get()方法之外的queue類的方法,因為在多執行緒環境中這是不可靠的!對於簡單的小型的執行緒中資料的通訊,可以使用佇列來處理。如果是大型的資料需要互動通訊,python提供了相關的模組你可以使用,具體的u need baidu.

所謂協程,其實就是在單執行緒的環境下的yield程式。

from collections import deque

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()

在這裡說下自己這段時間使用python的心得,python的確不錯,但效能也是為人詬病,一開始學習python,我也是去做一些比較炫的程式,最起碼聽起來逼格高,比如使用python的自然語言處理來做情感分析以及最熱的爬蟲程式,還有做炫的資料分析圖表。漸漸地,我就放下了那些,因為程式的重點不在那些,只要你會點基本的語法,看得懂官方文件就能夠做出來,而程式**的重點在效能,優化。最大程度的寫出功能最完善,效能最優,結構最優美的程式,其實這就有點像是政治老師常說的"文化軟實力",程式中的"軟實力"應該是在程式中嵌入最適合的設計模式,做最完備的程式優化,採用最省效能的資料結構等.

簡單執行緒實驗

名稱 簡單執行緒實驗 說明 執行緒是輕量級的程序。我們可以通過建立執行緒來達到較小的開銷 比執行緒來說 執行緒的使用主要幾個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 事件迴圈,相當於乙個無限迴圈 不清楚迴圈多少次 我們可以把一些特殊函式註冊 放置 到這個事件迴圈上,當滿足某些條件的時候,函式就會被迴圈執行。程式是按照設定的順序從頭執行到尾,執行的次數也是完全按照設定。當在編寫非同步程式時,必然其中有部分程式的執行耗時是比較久的,需要先讓出當...