最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python簡單線程和協(xié)程學習心得(分享)

 更新時間:2017年06月14日 09:19:58   投稿:jingxian  
下面小編就為大家?guī)硪黄猵ython簡單線程和協(xié)程學習心得(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

python中對線程的支持的確不夠,不過據(jù)說python有足夠完備的異步網(wǎng)絡框架模塊,希望日后能學習到,這里就簡單的對python中的線程做個總結

threading庫可用來在單獨的線程中執(zhí)行任意的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() # 停止線程

start函數(shù)是用來開啟線程的,_stop函數(shù)是用來停止線程的。為了防止在線程中進行I/O操作時出現(xiàn)阻塞等問題,運行一段時間之后,可以判斷線程是否還存活,如果線程還存在就調用_stop()停止,防止阻塞(你可以將_stop函數(shù)封裝到類中,我這里并沒有這么做)。

當然,你可以調用ThreadPool線程池來處理,而不是手動創(chuàng)建線程。如果線程間不需要共享變量的話,使用線程還是很方便的,可以減少很多的麻煩操作以及省時。如果需要在線程間進行通信,我們可以使用隊列來實現(xiàn):

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類的方法,因為在多線程環(huán)境中這是不可靠的!對于簡單的小型的線程中數(shù)據(jù)的通信,可以使用隊列來處理。如果是大型的數(shù)據(jù)需要交互通信,python提供了相關的模塊你可以使用,具體的u need baidu.

所謂協(xié)程,其實就是在單線程的環(huán)境下的yield程序。

from collections import deque
 
 
def countdown(n):
  while n > 0:
    print("T-minus", n)
    yield # 返回之后下次直接從這里執(zhí)行...相當于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):
    self._task_queue.append(task)
 
  def run(self):
    while self._task_queue:
      task = self._task_queue.popleft()
      try:
        next(task)
        self._task_queue.append(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的自然語言處理來做情感分析以及最熱的爬蟲程序,還有做炫的數(shù)據(jù)分析圖表。漸漸地,我就放下了那些,因為程序的重點不在那些,只要你會點基本的語法,看得懂官方文檔就能夠做出來,而程序代碼的重點在性能,優(yōu)化。最大程度的寫出功能最完善,性能最優(yōu),結構最優(yōu)美的程序,其實這就有點像是老師常說的"文化軟實力",程序中的"軟實力"應該是在程序中嵌入最適合的設計模式,做最完備的程序優(yōu)化,采用最省性能的數(shù)據(jù)結構等。

以上這篇python簡單線程和協(xié)程學習心得(分享)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Python解析JSON數(shù)據(jù)的基本方法實例代碼

    Python解析JSON數(shù)據(jù)的基本方法實例代碼

    JSON (JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式,下面這篇文章主要給大家介紹了關于Python解析JSON數(shù)據(jù)的基本方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-01-01
  • jupyter notebook 重裝教程

    jupyter notebook 重裝教程

    這篇文章主要介紹了jupyter notebook 重裝教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Django項目中動態(tài)設置靜態(tài)文件路徑的全過程

    Django項目中動態(tài)設置靜態(tài)文件路徑的全過程

    這篇文章主要給大家介紹了關于Django項目中動態(tài)設置靜態(tài)文件路徑的相關資料,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-02-02
  • Python中的優(yōu)先隊列(priority?queue)和堆(heap)

    Python中的優(yōu)先隊列(priority?queue)和堆(heap)

    這篇文章主要介紹了Python中的優(yōu)先隊列(priority?queue)和堆(heap),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • python字典翻轉的實現(xiàn)

    python字典翻轉的實現(xiàn)

    本文主要介紹了python字典翻轉的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • python 利用panda 實現(xiàn)列聯(lián)表(交叉表)

    python 利用panda 實現(xiàn)列聯(lián)表(交叉表)

    這篇文章主要介紹了python 利用panda 實現(xiàn)列聯(lián)表(交叉表),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • python同時遍歷兩個list用法說明

    python同時遍歷兩個list用法說明

    這篇文章主要介紹了python同時遍歷兩個list用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Pytorch訓練模型得到輸出后計算F1-Score 和AUC的操作

    Pytorch訓練模型得到輸出后計算F1-Score 和AUC的操作

    這篇文章主要介紹了Pytorch訓練模型得到輸出后計算F1-Score 和AUC的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python異步編程入門之實現(xiàn)文件批處理的并發(fā)處理方式

    Python異步編程入門之實現(xiàn)文件批處理的并發(fā)處理方式

    本文以Python初級程序員為對象,介紹了如何使用asyncio和logging模塊實現(xiàn)一個異步批處理文件的并發(fā)處理系統(tǒng),以提高處理大量文件或數(shù)據(jù)時的效率,其中,通過配置日志系統(tǒng)記錄處理文件的日志信息,定義AsyncBatchProcessor類控制并發(fā)任務的數(shù)量
    2024-10-10
  • Python讀取Excel數(shù)據(jù)實現(xiàn)批量生成PPT

    Python讀取Excel數(shù)據(jù)實現(xiàn)批量生成PPT

    我們常常面臨著大量的重復性工作,通過人工方式處理往往耗時耗力易出錯。而Python在辦公自動化方面具有天然優(yōu)勢。本文將利用讀取Excel數(shù)據(jù)并實現(xiàn)批量生成PPT,需要的可以參考一下
    2022-05-05

最新評論

宁南县| 伊川县| 延川县| 商水县| 苍南县| 江北区| 常山县| 惠来县| 阳高县| 朝阳县| 同仁县| 穆棱市| 瓦房店市| 毕节市| 赤城县| 太和县| 长沙县| 班玛县| 贞丰县| 山东省| 大兴区| 江门市| 新丰县| 定边县| 浦北县| 连州市| 建宁县| 宁阳县| 缙云县| 嘉禾县| 神农架林区| 台湾省| 随州市| 通河县| 隆子县| 湖南省| 墨江| 盐津县| 青州市| 盐边县| 海林市|