1. 程式人生 > >python多執行緒技術 python-執行緒的暫停, 恢復, 退出

python多執行緒技術 python-執行緒的暫停, 恢復, 退出

由於執行緒是作業系統直接支援的執行單元,因此,高階語言通常都內建多執行緒的支援,Python也不例外,並且,Python的執行緒是真正的Posix Thread,而不是模擬出來的執行緒。

Python的標準庫提供了兩個模組:threadthreadingthread是低階模組,threading是高階模組,對thread進行了封裝。絕大多數情況下,我們只需要使用threading這個高階模組。

啟動一個執行緒就是把一個函式傳入並建立Thread例項,然後呼叫start()開始執行:

import time, threading

# 新執行緒執行的程式碼:
def loop():
    print 'thread %s is running...' % threading.current_thread().name
    n = 0
    while n < 5:
        n = n + 1
        print 'thread %s >>> %s' % (threading.current_thread().name, n)
        time.sleep(1)
    print 'thread %s ended.' % threading.current_thread().name

print 'thread %s is running...' % threading.current_thread().name
t = threading.Thread(target=loop, name='LoopThread')
t.start()
t.join()
print 'thread %s ended.' % threading.current_thread().name

我們都知道python中可以是threading模組實現多執行緒, 但是模組並沒有提供暫停, 恢復和停止執行緒的方法, 一旦執行緒物件呼叫start方法後, 只能等到對應的方法函式執行完畢. 也就是說一旦start後, 執行緒就屬於失控狀態. 不過, 我們可以自己實現這些. 一般的方法就是迴圈地判斷一個標誌位, 一旦標誌位到達到預定的值, 就退出迴圈. 這樣就能做到退出執行緒了. 但暫停和恢復執行緒就有點難了, 我一直也不清除有什麼好的方法, 直到我看到threading中Event物件的wait方法的描述時.

#!/usr/bin/env python
# coding: utf-8

import threading
import time


class Job(threading.Thread):

    def __init__(self, *args, **kwargs):
        super(Job, self).__init__(*args, **kwargs)
        self.__flag = threading.Event()     # 用於暫停執行緒的標識
        self.__flag.set()       # 設定為True
        self.__running = threading.Event()      # 用於停止執行緒的標識
        self.__running.set()      # 將running設定為True

    def run(self):
        while self.__running.isSet():
            self.__flag.wait()      # 為True時立即返回, 為False時阻塞直到內部的標識位為True後返回
            print time.time()
            time.sleep(1)

    def pause(self):
        self.__flag.clear()     # 設定為False, 讓執行緒阻塞

    def resume(self):
        self.__flag.set()    # 設定為True, 讓執行緒停止阻塞

    def stop(self):
        self.__flag.set()       # 將執行緒從暫停狀態恢復, 如何已經暫停的話
        self.__running.clear()        # 設定為False    

相關推薦

python執行技術 python-執行暫停, 恢復, 退出

由於執行緒是作業系統直接支援的執行單元,因此,高階語言通常都內建多執行緒的支援,Python也不例外,並且,Python的執行緒是真正的Posix Thread,而不是模擬出來的執行緒。Python的標準庫提供了兩個模組:thread和threading,thread是低階模

Python工(利用threading建立執行時傳入引數--args引數)

  target  : 指定 這個執行緒去哪個函式裡面去執行程式碼   args:     指定將來呼叫 函式的時候   傳遞什麼資料過去         &n

Python 程序程式設計解決python執行程式設計CPU利用率低的問題

之前用python寫了個多執行緒,但發現四核的電腦,CPU利用率卻用了不到30%,後來使用多程序程式設計,四核全開,CPU利用率達到了100%!python中的多執行緒其實並不是真正的多執行緒,如果想要充分地使用多核CPU的資源,在python中大部分情況需要使用多程序。Py

python-執行暫停, 恢復, 退出

原文地址為: python-執行緒的暫停, 恢復, 退出   我們都知道python中可以是threading模組實現多執行緒, 但是模組並沒有提供暫停, 恢復和停止執行緒的方法, 一旦執行緒物件呼叫start方法後, 只能等到對應的方法函式執行完畢. 也就是說一旦start後, 執行緒

Python執行程序和協程的例項講解

執行緒、程序和協程是什麼 執行緒、程序和協程的詳細概念解釋和原理剖析不是本文的重點,本文重點講述在Python中怎樣實際使用這三種東西 參考: 程序、執行緒、協程之概念理解 程序(Process)是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。執

Python 執行 thread join() 的作用

原文地址 在 Python 的多執行緒程式設計中,在例項程式碼中經常有 thread1.join()這樣的程式碼。那麼今天咱們用實際程式碼來解釋一下 join 函式的作用。   join的原理就是依次檢驗執行緒池中的執行緒是否結束,沒有結束就阻塞直到執行緒結束,如果結束則跳轉執行下一

教你用 Python 執行爬京東商城商品評論(代理ip請閱讀上一篇)

爬蟲永不停息 最近改進上一篇的爬蟲,不爬豆瓣了,改爬一爬京東評論,先放幾張圖研究看看先。 研究了一下,發現商品的id就是連結.html前面的數字。我們把它複製貼上下拉 1,對上一篇的代表進行修改和新增 class Spider(): def

Python執行小例子

Python多執行緒小例子 1、在主執行緒中建立子執行緒 下面的程式碼一共建立了三個執行緒:主執行緒、coding 執行緒和music 執行緒,最後使用thread_list 裝載執行緒

初識python執行

1) 在python中如何建立一個執行緒物件? 如果你要建立一個執行緒物件,很簡單,只要你的類繼承threading.Thread,然後在__init__裡首先呼叫threading.Thread的__init__方法即可:   import threading

利用Python執行限制 http 真實請求時間或限制函式最大執行時間的裝飾器

  這段時間在製作一個爬蟲的時候發現了一個比較神奇的事情 python requests 包發起請求的時候設定 timeout 引數 竟然不起作用? what 你要弄啥么蛾子嘞,  後來各種找原因終於在別人的提醒下又看了下 requests 的文件才發

PYTHON——執行:同步鎖:Lock

一、先用一個例子說明沒有用鎖的時候,達到的效果錯誤: 1、例項(沒有鎖的情況): import time import threading # 沒有用鎖的 # 時候,出現多個執行緒拿到相同資源的現象。 # 如下例中,共享資源變數num=100,我們開100個執行緒,每個執行緒將資源變數num減1,按

PYTHON——執行:訊號量(Semaphore)

  訊號量也是一把鎖,用來控制執行緒併發數的。   BoundedSemaphore或Semaphore管理一個內建的計數 器,每當呼叫acquire()時-1,呼叫release()時+1。       計數器不能小於0,當計數器為 0時,acquire()將阻塞執行緒至同

PYTHON——執行:條件變數(Condition)

  條件變數(Condition)也是一把鎖,除了同步鎖的作用外,還具有線上程間通訊的功能。   有一類執行緒需要滿足條件之後才能夠繼續執行,Python提供了threading.Condition 物件用於條件變數執行緒的支援,它除了能提供RLock()或Lock()的方法外,還提供了 wait()、no

PYTHON——執行:佇列Queue資料結構

1、佇列模組簡介   佇列是一種資料結構,用於存放資料,類似列表。它是先進先出模式(FIFO模式),類似管道一般; 單執行緒不需要用到佇列Queue,它主要用在多執行緒之間的,Queue稱為多執行緒利器。 列表在多執行緒共享資源的話,與queue佇列比較,主要表現為列表在多執行緒中,資料不安全。多個執行

python執行獲取區域網內所有電腦IP

#coding = utf-8 import os,os.path import threading import time lock = threading.RLock() def action(ip): result = "ip.txt" return1 = os.sy

Python 執行 程序 協程 yield

python中多執行緒和多程序的最大區別是穩定性和效率問題 多程序互相之間不影響,一個崩潰了不影響其他程序,穩定性高 多執行緒因為都在同一程序裡,一個執行緒崩潰了整個程序都完蛋 多程序對系統資源開銷大,多執行緒對系統資源開銷小,所以這方面來說多執行緒會比多程序快一點點 關於執行

python執行程序、協程的使用

本文主要介紹多執行緒、多程序、協程的最常見使用,每個的詳細說明與介紹有時間會在以後的隨筆中體現。 一、多執行緒 1.python通過兩個標準庫thread和threading提供對執行緒的支援。thread提供了低級別的、原始的執行緒以及一個簡單的鎖。threading通過對thread模組

利用python執行實現區塊鏈paxos演算法解決使用者共識

本來是做python 開發的老闆最近讓做區塊鏈也沒有頭緒從網上找了點視訊看著照的敲了了下感覺是自己寫過最多的程式碼啦 怪我才疏學淺  哈哈哈-- import threading, socket, pickle, queue class Message(object): MS

Python 執行工具包 threading 的超簡單例子

筆者初學 Python,在程式設計中,遇到了多執行緒的問題,即需要一個程式中的幾部分同時執行。 例如:給一個後臺程式寫一個“心跳程序”,定時輸出訊號,以確認程式正常執行。 在網上搜索了下發現有不少帖子,但總感覺帖子中舉的例子不夠簡單和直觀,遂決定寫個自己覺得夠簡單直觀的例子。程式碼如

python 執行工內網攝像頭登陸

python 多執行緒多工內網攝像頭登陸 #coding=utf-8 import time import datetime import xlwt import xlrd from xlutils.copy import copy; import requests import so