国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python 多線程編程

dreamGong / 2462人閱讀

摘要:,,等實用方法可以獲取一個隊列的當前大小和狀態。但要注意,這些方法都不是線程安全的。可能你對一個隊列使用判斷出這個隊列為空,但同時另外一個線程可能已經向這個隊列中插入一個數據項。

python 多線程編程 使用回調方式
import time
def countdown(n):
    while n > 0:
        print("T-minus", n)
        n -= 1
        time.sleep(5)

# Create and launch a thread
from threading import Thread
t = Thread(target=countdown, args=(10,))
t.start()
把線程放入一個類
from threading import Thread

class CountdownTask:
    def __init__(self):
        self._running = True

    def terminate(self):
        self._running = False

    def run(self, n):
        while self._running and n > 0:
            print("T-minus", n)
            n -= 1
            time.sleep(5)

c = CountdownTask()
t = Thread(target=c.run, args=(10,))
t.start()
c.terminate() # Signal termination
t.join()      # Wait for actual termination (if needed)

注意使用變量 self._running 退出線程的方式

使用繼承方式

from threading import Thread

class CountdownThread(Thread):

def __init__(self, n):
    super().__init__()
    self.n = n
def run(self):
    while self.n > 0:

        print("T-minus", self.n)
        self.n -= 1
        time.sleep(5)

c = CountdownThread(5)
c.start()

使用 Queue 進行線程間通信
import Queue
import threading
import time

task_queue = Queue.Queue()


class ThreadTest(threading.Thread):
    def __init__(self, queue):
        threading.Thread.__init__(self)
        self.queue = queue

    def run(self):
        while True:
            msg = self.queue.get()
            print(msg)
            time.sleep(0.1)
            self.queue.task_done()


def main():
    start = time.time()
    # populate queue with data
    for i in range(100):
        task_queue.put("message")

    # spawn a pool of threads, and pass them queue instance
    for i in range(5):
        t = ThreadTest(task_queue)
        t.setDaemon(True)
        t.start()

    # wait on the queue until everything has been processed
    task_queue.join()
    print "Elapsed Time: {}".format(time.time() - start)


if __name__ == "__main__":
    main()

setDaemon 設置為 True, run 函數中不需要退出,主線程結束后所有子線程退出
如果 setDaemon 設置為 False,則改為

def run(self):
    while not self.queue.empty():
        msg = self.queue.get()
        print(msg)
        time.sleep(0.1)
        self.queue.task_done()

并且在主函數結束前 join 所有線程

注意

向隊列中添加數據項時并不會復制此數據項,線程間通信實際上是在線程間傳遞對象引用。如果你擔心對象的共享狀態,那你最好只傳遞不可修改的數據結構(如:整型、字符串或者元組)或者一個對象的深拷貝。

  from queue import Queue
  from threading import Thread
  import copy

  # A thread that produces data
  def producer(out_q):
      while True:
          # Produce some data
          ...
          out_q.put(copy.deepcopy(data))

  # A thread that consumes data
  def consumer(in_q):
      while True:
          # Get some data
          data = in_q.get()
          # Process the data
          ...

q.qsize() , q.full() , q.empty() 等實用方法可以獲取一個隊列的當前大小和狀態。但要注意,這些方法都不是線程安全的。可能你對一個隊列使用 empty() 判斷出這個隊列為空,但同時另外一個線程可能已經向這個隊列中插入一個數據項。

參考

python3-cookbook Chapter 12 "Concurrency-Starting and Stopping Threads"

Practical threaded programming with Python

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/45007.html

相關文章

  • 使用 Python 進行并發編程系列 - 收藏集 - 掘金

    摘要:使用進行并發編程篇三掘金這是使用進行并發編程系列的最后一篇。所以我考慮啟用一個本地使用進行并發編程篇二掘金我們今天繼續深入學習。 使用 Python 進行并發編程 - asyncio 篇 (三) - 掘金 這是「使用Python進行并發編程」系列的最后一篇。我特意地把它安排在了16年最后一天。 重新實驗上篇的效率對比的實現 在第一篇我們曾經對比并發執行的效率,但是請求的是httpb...

    MorePainMoreGain 評論0 收藏0
  • Python

    摘要:最近看前端都展開了幾場而我大知乎最熱語言還沒有相關。有關書籍的介紹,大部分截取自是官方介紹。但從開始,標準庫為我們提供了模塊,它提供了和兩個類,實現了對和的進一步抽象,對編寫線程池進程池提供了直接的支持。 《流暢的python》閱讀筆記 《流暢的python》是一本適合python進階的書, 里面介紹的基本都是高級的python用法. 對于初學python的人來說, 基礎大概也就夠用了...

    dailybird 評論0 收藏0
  • Python 的并發編程

    摘要:本文最先發布在博客這篇文章將講解并發編程的基本操作。并發是指能夠多任務處理,并行則是是能夠同時多任務處理。雖然自帶了很好的類庫支持多線程進程編程,但眾所周知,因為的存在,很難做好真正的并行。 本文最先發布在博客:https://blog.ihypo.net/151628... 這篇文章將講解 Python 并發編程的基本操作。并發和并行是對孿生兄弟,概念經常混淆。并發是指能夠多任務處...

    happen 評論0 收藏0
  • python初學——網絡編程之FTP服務器支持并發版本

    摘要:擴展支持多用戶并發訪問與線程池。項目請見初學網絡編程之服務器。不允許超過磁盤配額。該文件是一個使用模塊編寫的線程池類。這一步就做到了線程池的作用。 對MYFTP項目進行升級。擴展支持多用戶并發訪問與線程池。MYFTP項目請見python初學——網絡編程之FTP服務器。 擴展需求 1.在之前開發的FTP基礎上,開發支持多并發的功能2.不能使用SocketServer模塊,必須自己實現多線...

    oysun 評論0 收藏0
  • python學習筆記- 線程

    摘要:也提供多線程支持,而且中的線程并非是模擬出來的多線程,而是系統級別的標準庫提供了兩個模塊和。同一個變量,線程則會互相共享。例如多個線程對銀行中的某一個賬戶進行操作。但是實際情況是隨意切換線程。說到的多線程編程,就會繞不過。 該文章參考了http://www.liaoxuefeng.com/wi... 廖雪峰的教程。 一個進程至少有一個線程。Python也提供多線程支持,而且Python...

    RiverLi 評論0 收藏0

發表評論

0條評論

dreamGong

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<