欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python簡(jiǎn)單線程和協(xié)程學(xué)習(xí)心得(分享)

 更新時(shí)間:2017年06月14日 09:19:58   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇python簡(jiǎn)單線程和協(xié)程學(xué)習(xí)心得(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

python中對(duì)線程的支持的確不夠,不過(guò)據(jù)說(shuō)python有足夠完備的異步網(wǎng)絡(luò)框架模塊,希望日后能學(xué)習(xí)到,這里就簡(jiǎn)單的對(duì)python中的線程做個(gè)總結(jié)

threading庫(kù)可用來(lái)在單獨(dú)的線程中執(zhí)行任意的python可調(diào)用對(duì)象。盡管此模塊對(duì)線程相關(guān)操作的支持不夠,但是我們還是能夠用簡(jiǎn)單的線程來(lái)處理I/O操作,以減低程序響應(yīng)時(shí)間。

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() # 開(kāi)啟線程
 
time.sleep(2)
 
if t.is_alive() is True:
  print("停止線程...")
  t._stop() # 停止線程

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

當(dāng)然,你可以調(diào)用ThreadPool線程池來(lái)處理,而不是手動(dòng)創(chuàng)建線程。如果線程間不需要共享變量的話,使用線程還是很方便的,可以減少很多的麻煩操作以及省時(shí)。如果需要在線程間進(jìn)行通信,我們可以使用隊(duì)列來(lái)實(shí)現(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實(shí)例會(huì)被所有的線程共享,同時(shí)它又擁有了所有所需要的鎖,因此它們可以安全的在任意多的線程共享。在這里要注意,不要再多線程中使用除了put(),get()方法之外的queue類(lèi)的方法,因?yàn)樵诙嗑€程環(huán)境中這是不可靠的!對(duì)于簡(jiǎn)單的小型的線程中數(shù)據(jù)的通信,可以使用隊(duì)列來(lái)處理。如果是大型的數(shù)據(jù)需要交互通信,python提供了相關(guān)的模塊你可以使用,具體的u need baidu.

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

from collections import deque
 
 
def countdown(n):
  while n > 0:
    print("T-minus", n)
    yield # 返回之后下次直接從這里執(zhí)行...相當(dāng)于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()

在這里說(shuō)下自己這段時(shí)間使用python的心得,python的確不錯(cuò),但性能也是為人詬病,一開(kāi)始學(xué)習(xí)python,我也是去做一些比較炫的程序,最起碼聽(tīng)起來(lái)格調(diào)高,比如使用python的自然語(yǔ)言處理來(lái)做情感分析以及最熱的爬蟲(chóng)程序,還有做炫的數(shù)據(jù)分析圖表。漸漸地,我就放下了那些,因?yàn)槌绦虻闹攸c(diǎn)不在那些,只要你會(huì)點(diǎn)基本的語(yǔ)法,看得懂官方文檔就能夠做出來(lái),而程序代碼的重點(diǎn)在性能,優(yōu)化。最大程度的寫(xiě)出功能最完善,性能最優(yōu),結(jié)構(gòu)最優(yōu)美的程序,其實(shí)這就有點(diǎn)像是老師常說(shuō)的"文化軟實(shí)力",程序中的"軟實(shí)力"應(yīng)該是在程序中嵌入最適合的設(shè)計(jì)模式,做最完備的程序優(yōu)化,采用最省性能的數(shù)據(jù)結(jié)構(gòu)等。

以上這篇python簡(jiǎn)單線程和協(xié)程學(xué)習(xí)心得(分享)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python+Opencv實(shí)現(xiàn)數(shù)字識(shí)別的示例代碼

    Python+Opencv實(shí)現(xiàn)數(shù)字識(shí)別的示例代碼

    這篇文章主要介紹了Python+Opencv實(shí)現(xiàn)數(shù)字識(shí)別的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python 獲取異常(Exception)信息的幾種方法

    Python 獲取異常(Exception)信息的幾種方法

    這篇文章主要介紹了Python 獲取異常(Exception)信息的幾種方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • Python圖像運(yùn)算之圖像閾值化處理詳解

    Python圖像運(yùn)算之圖像閾值化處理詳解

    這篇文章將詳細(xì)講解圖像閾值化處理,涉及閾值化處理、固定閾值化處理和自適應(yīng)閾值化處理,這是圖像邊緣檢測(cè)或圖像增強(qiáng)等處理的基礎(chǔ),感興趣的可以了解一下
    2022-04-04
  • Python中def的用法以及def是什么意思詳解

    Python中def的用法以及def是什么意思詳解

    這篇文章主要介紹了Python中def的用法以及def是什么意思的相關(guān)資料,文中介紹了Python中函數(shù)的定義和使用方法,還給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2024-10-10
  • 詳解如何使用python實(shí)現(xiàn)猜數(shù)字游戲

    詳解如何使用python實(shí)現(xiàn)猜數(shù)字游戲

    “猜數(shù)字”游戲是一款簡(jiǎn)單而有趣的小游戲,玩家需要在給定的范圍內(nèi)猜出一個(gè)由計(jì)算機(jī)隨機(jī)生成的數(shù)字,本文將使用Python語(yǔ)言來(lái)實(shí)現(xiàn)這款游戲,并詳細(xì)介紹其實(shí)現(xiàn)過(guò)程,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2024-04-04
  • Python小實(shí)例混合使用turtle和tkinter讓小海龜互動(dòng)起來(lái)

    Python小實(shí)例混合使用turtle和tkinter讓小海龜互動(dòng)起來(lái)

    Tkinter模塊("Tk 接口")是Python的標(biāo)準(zhǔn)Tk GUI工具包的接口.Tk和Tkinter可以在大多數(shù)的Unix平臺(tái)下使用,同樣可以應(yīng)用在Windows和Macintosh系統(tǒng)里.Tk8.0的后續(xù)版本可以實(shí)現(xiàn)本地窗口風(fēng)格,并良好地運(yùn)行在絕大多數(shù)平臺(tái)中
    2021-10-10
  • 一行代碼讓 Python 的運(yùn)行速度提高100倍

    一行代碼讓 Python 的運(yùn)行速度提高100倍

    python一直被病垢運(yùn)行速度太慢,但是實(shí)際上python的執(zhí)行效率并不慢,慢的是python用的解釋器Cpython運(yùn)行效率太差。這篇文章主要介紹了一行代碼讓 Python 的運(yùn)行速度提高100倍的相關(guān)知識(shí),需要的朋友可以參考下
    2018-10-10
  • Python學(xué)習(xí)之字典和集合的使用詳解

    Python學(xué)習(xí)之字典和集合的使用詳解

    Python 中字典和集合也是非常相近的概念,而且從外觀看上去,也有那么一絲絲的相似。本文將從字典基本知識(shí)入手,為你展開(kāi)字典類(lèi)型數(shù)據(jù)的各個(gè)知識(shí)點(diǎn),需要的可以參考一下
    2022-11-11
  • python 實(shí)現(xiàn)logging動(dòng)態(tài)變更輸出日志文件名

    python 實(shí)現(xiàn)logging動(dòng)態(tài)變更輸出日志文件名

    這篇文章主要介紹了python 實(shí)現(xiàn)logging動(dòng)態(tài)變更輸出日志文件名的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • Pandas分組與排序的實(shí)現(xiàn)

    Pandas分組與排序的實(shí)現(xiàn)

    這篇文章主要介紹了Pandas分組與排序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07

最新評(píng)論