0:print('T-" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

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

系統 1709 0

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() # 停止線程
          

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

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

            
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):
    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的自然語言處理來做情感分析以及最熱的爬蟲程序,還有做炫的數據分析圖表。漸漸地,我就放下了那些,因為程序的重點不在那些,只要你會點基本的語法,看得懂官方文檔就能夠做出來,而程序代碼的重點在性能,優化。最大程度的寫出功能最完善,性能最優,結構最優美的程序,其實這就有點像是政治老師常說的"文化軟實力",程序中的"軟實力"應該是在程序中嵌入最適合的設計模式,做最完備的程序優化,采用最省性能的數據結構等。

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


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 手机看片日韩欧美 | www.麻豆| 欧美free性 | 久久综合性| 成a人v在线观看视频 | 中文字幕日韩欧美 | 黑人精品欧美一区二区蜜桃 | 午夜视频网址 | 深夜电影网| 亚洲一区免费在线观看 | 国产精品麻豆视频 | 精品69久久久久久99 | A片欧美乱妇高特黄AA片片 | 久久久久久久国产视频 | 亚州 色毛片免费观看 | 亚洲欧美自拍另类图片色 | 国产传媒在线视频 | 午夜寂寞影院在线观看 | 日本久久高清视频 | 黄色尤物 | 成人1234 | 日本在线黄 | 浮力影院国产第一页 | 亚洲一区二区三区视频 | 成人午夜亚洲影视在线观看 | 国产精品综合色区小说 | 可米影院 | 国产日韩欧美视频在线观看 | 天天操伊人 | 亚洲免费视频网 | 亚洲乱码视频在线观看 | 国内精品久久毛片一区二区 | JLZZJLZZ亚洲乱熟在线播放 | 欧美电影一区 | 噜噜噜色网 | 午夜宫电影 | 九九视频在线看精品 | 国产精品v欧美精品∨日韩 一级免费黄色免费片 | 国产精品免费观看 | 三级在线网站 | a级高清免费 |