1. 程式人生 > >python 多執行緒程式設計(一個經典例子)

python 多執行緒程式設計(一個經典例子)

python 多執行緒經典案例(摘自《python核心程式設計》)
使用佇列的資料結構,生產者生產商品,消費者選取商品,且時間均不固定

from random import randint
from time import sleep
from queue import Queue
from threading import Thread

class ThreadFunc(Thread):
    def __init__(self, target, args, name):
        super().__init__(target=target, args=args, name=name)
        self.func = target
        self.args = args
        self.name = name

    def
run(self):
self.func(self.args[0], self.args[1]) def writeQ(queue): print("Producing object for Q...") queue.put("xxx", 1) print("size now", queue.qsize()) def readQ(queue): val = queue.get(1) print("consumed object from Q... size now", queue.qsize()) def writer(queue, loops)
:
for i in range(loops): writeQ(queue) sleep(randint(1,3)) def reader(queue, loops): for i in range(loops): readQ(queue) sleep(randint(2,5)) funcs = [writer, reader] def main(): loops = randint(2,5) q = Queue(32) thread = list() for i in range(2
): t = ThreadFunc(target=funcs[i], args=(q, loops), name=funcs[i].__name__) thread.append(t) for i in range(2): thread[i].start() for i in range(2): thread[i].join() print("all DONE!") if __name__=="__main__": main()

以下為輸出資訊(每次都不一樣)Producing object for Q...
size now 1
consumed object from Q... size now 0
Producing object for Q...
size now 1
consumed object from Q... size now 0
Producing object for Q...
size now 1
Producing object for Q...
size now 2
Producing object for Q...
size now 3
consumed object from Q... size now 2
consumed object from Q... size now 1
consumed object from Q... size now 0
all DONE!

相關推薦

python 執行程式設計一個經典例子

python 多執行緒經典案例(摘自《python核心程式設計》) 使用佇列的資料結構,生產者生產商品,消費者選取商品,且時間均不固定 from random import randint from time import sleep from queu

python執行程式設計--threading模組

threading模組物件 物件 描述 Thread 一個執行緒的執行物件 Lock 鎖物件 RLock 可重入鎖物件,使單執行緒可以再次獲得已經獲得了的鎖(遞迴鎖定) Condition 條件變數,讓一個執行緒停下來,等待其它執行緒滿足了某個條件 Event

Linux執行程式設計不限Linux執行操作

——本文一個例子展開,介紹Linux下面執行緒的操作、多執行緒的同步和互斥。 前言 執行緒?為什麼有了程序還需要執行緒呢,他們有什麼區別?使用執行緒有什麼優勢呢?還有多執行緒程式設計的一些細節問題,如執行緒之間怎樣同步、互斥,這些東西將在本文中介紹。我在某QQ群裡見到這樣一道面試題: 是否熟悉POS

ubuntu下C++執行程式設計cmake生成makefile

最近做專案要用到多執行緒的程式設計,又要用到opencv因此採用cmake生成makefile然後進行編譯的方法比較簡單。這裡給出多執行緒的簡單例項。 主函式非常簡單: #include <iostream> #include <pthread.h&g

執行程式設計——寫一個簡單的死鎖

(整個九月忙著找工作,好多收穫,好多遺憾,最終結局還可以接受,技術路還很遠,再接再厲!面去哪兒網時,寫慣了演算法的我突然讓寫了幾個多執行緒程式設計,有點矇蔽,最近好好整理一下) 死鎖發生的原因: 1、

執行程式設計python語言

     眾所周知,多執行緒程式設計是一種可以提高整個任務效能的並行處理方式。多執行緒程式設計的主要特點有以下幾個方面,本質上是非同步的;需要多個併發活動;每個活動的處理順序可能是不確定的,或者說是隨機的、不可預測的。這種程式設計任務可以被組織或劃分成多個執行流,其中每個執行

Python執行程式設計,執行

1 2 3 from threading import Thread 4 import time 5 ​ 6 class MyThread(Thread): 7 name1 = 'MyThread-1' 8 def __init__(self,target,args

Python執行程式設計,執行鎖,以及補充上一篇程序文章

程序補充 程序間的訊號 訊號是唯一的非同步通訊方法 一個程序向另一個程序傳送一個訊號來傳遞某種資訊,接受者根據傳遞的資訊來做相應的事 $ kill -l檢視系統訊號說明 $ kill -9 pid號對程序傳送訊號 訊號名稱 說明

Python執行程式設計

#!/usr/bin/python #!coding=utf-8 import threading import time exitFlag = 0 class MyThread(threading.Thread): def __init__(self, threadID, name, counte

談談python執行程式設計

談談python多執行緒程式設計 Python中GIL概念 Python(CPython)不是執行緒安全的,所以我們需要一個GIL(Global interpreter Lock),來保證資料完性和安全性。也就是同一時間內同一核CPU中只能有一個GIL。 Threading的GI

Linux學習之執行程式設計

言之者無罪,聞之者足以戒。 ——《詩序》 (二)、執行緒的基本控制 1、終止程序: 如果程序中的任意一個程序呼叫了exit、_exit、_Exit,那麼整個程序就會終止 普通的單個程序有以下3種退出方式,這樣不會終止程序: (1)從啟動例程中返回,返回值是執行緒的退

Linux學習之執行程式設計

言之者無罪,聞之者足以戒。 ——《詩序》 三、Linux執行緒的高階控制 1、一次性初始化 有些事需要且只能執行一次(比如互斥量初始化)。通常當初始化應用程式時,可以比較容易地將其放在main函式中。但當你寫一個庫函式時,就不能在main裡面初始化了,你可以用靜態初始化

Linux學習之執行程式設計

言之者無罪,聞之者足以戒。 ——《詩序》 4、執行緒私有屬性 應用程式設計中有必要提供一種變數,使得多個函式多個執行緒都可以訪問這個變數(看起來是個全域性變數),但是執行緒對這個變數的訪問都不會彼此產生影響(貌似不是全域性變數哦),但是你需要這樣的資料,比如errno。那

Java執行程式設計-1-執行安全和鎖Synchronized概念

一、程序與執行緒的概念 (1)在傳統的作業系統中,程式並不能獨立執行,作為資源分配和獨立執行的基本單位都是程序。 在未配置 OS 的系統中,程式的執行方式

Java執行程式設計-5-使用Lock物件實現同步以及執行間通訊

前幾篇: 在《Java多執行緒程式設計-(4)-執行緒間通訊機制的介紹與使用》已經學習了,可以使用方法wait/notify 結合同步關鍵字syn

執行程式設計——面試題,每個執行只打印一種字元,執行協同順序列印n次字串求大神的其他實現方案

(這個是歡聚時刻(YY)的筆試題,在筆試的時候沒有寫出來,後來自己寫了出來,希望大神能給出更優秀的解決方案……ps:現在面試官總有面試時問筆試程式設計題思路的習慣,呵呵) 題目簡述: 輸入一個字串以

Linux 執行程式設計

Linux 多執行緒程式設計 執行緒(Thread)已被許多作業系統所支援,包括Windows/NT ,Linux 以前的多執行緒其實是多程序,而現在意味著一個程序中有多個執行緒 使用多執行緒的原因(多執行緒的優點): 1.“節省”,啟動一個新的程序需要分配給它獨立的地

Java執行程式設計-11-面試常客ThreadLocal出現OOM記憶體溢位的場景和原理分析

一、案例程式碼 1、首先看一下程式碼,模擬了一個執行緒數為500的執行緒池,所有執行緒共享一個ThreadLocal變數,每一個執行緒執行的時候插入一個大的List集合: 2、設定JVM引數設定最大記憶體為256M,以便模擬出OOM: 3、執行程式碼,輸出結果: 可以看出,單執行緒池

Java執行程式設計-14-無鎖CAS操作以及Java中Atomic併發包的“18羅漢”

原文出自 : https://blog.csdn.net/xlgen157387/article/details/78364246 上一篇: Java多執行緒程式設計-(13)- 關於鎖優化的幾點建議 一、背景 通過上面的學習,我們應該很清楚的

ava執行程式設計-13- 關於鎖優化的幾點建議

原文出自 : https://blog.csdn.net/xlgen157387/article/details/78363616 一、背景 在《 Java多執行緒程式設計-(11)-從volatile和synchronized的底層實現原理看Java虛擬機器對鎖