Python多執行緒 貨物工人模型

2021-09-02 23:29:44 字數 2208 閱讀 8473

為了測試多執行緒效率,我寫了一段貨物工人模型**,假如乙個卡車上有20件貨,每件貨有重量,1kg花費1s,2kg花費2s,以此類推,以此模型建立**如下:

# coding:utf-8

import threading

import time

from random import randint

# 貨物源

goods =

for n in range(20):

# 工人貨物模型

class mythread(threading.thread):

def __init__(self, thread_id, name):

threading.thread.__init__(self)

self.thread_id = thread_id

self.name = name

def run(self):

print self.name + '開始工作'

do_work(self.name)

print self.name + '完成工作'

# 處理貨物

def do_work(thread_name):

while len(goods) > 0:

if len(goods) > 0:

# 從搬運貨物的那一刻起貨物就已經不存在貨源了

wight = goods[0]

goods.remove(wight)

time.sleep(wight)

print thread_name + '花費了 ' + str(wight) + ' 秒'

# 工人

workers = ['張三']

threads =

thread_id = 0

first_time = time.time()

for worker in workers:

thread_id += 1

thread = mythread(thread_id, worker)

thread.start()

# 等待所有執行緒完成

for t in threads:

t.join()

last_time = time.time()

print "總耗時: " + str(last_time - first_time) + " 秒"

單工人工作效率:

張三開始工作

張三花費了 5 秒

張三花費了 3 秒

張三花費了 5 秒

張三花費了 4 秒

張三花費了 5 秒

張三花費了 1 秒

張三花費了 5 秒

張三花費了 4 秒

張三花費了 3 秒

張三花費了 3 秒

張三花費了 5 秒

張三花費了 3 秒

張三花費了 5 秒

張三花費了 5 秒

張三花費了 4 秒

張三花費了 4 秒

張三花費了 4 秒

張三花費了 1 秒

張三花費了 3 秒

張三花費了 2 秒

張三完成工作

總耗時: 74.0130000114 秒

改變工人數量增加到4個:

張三開始工作

李四開始工作

王五開始工作

趙六開始工作

張三花費了 1 秒 王五花費了 1 秒

李四花費了 2 秒

趙六花費了 2 秒

王五花費了 3 秒

李四花費了 3 秒

張三花費了 5 秒

趙六花費了 5 秒 李四花費了 2 秒

王五花費了 3 秒

趙六花費了 1 秒

張三花費了 3 秒

李四花費了 3 秒

趙六花費了 2 秒

張三花費了 2 秒

李四花費了 1 秒

王五花費了 5 秒

王五完成工作

趙六花費了 4 秒

趙六完成工作

張三花費了 5 秒

張三完成工作

李四花費了 5 秒

李四完成工作

總耗時: 16.004999876 秒

測試完成,效率槓槓的,當然可以考慮用這個模型來延申,比如工人成本,效率成本,這一批貨物該找多少工人更划算。

11執行緒 多執行緒模型

一 什麼是執行緒 為什麼要引入執行緒 二 引入執行緒機制後的變化 三 執行緒有的屬性 四 執行緒的實現方式 五 多執行緒模型 1 執行緒引入原因分析 2 執行緒 可以把執行緒理解為輕量級程序。執行緒是基本的cpu執行單元,也是程式執行流的最小單元。引入執行緒後不僅程序可以併發,程序內的執行緒也可以併...

python多執行緒 python多執行緒

通常來說,多程序適用於計算密集型任務,多執行緒適用於io密集型任務,如網路爬蟲。關於多執行緒和多程序的區別,請參考這個 下面將使用python標準庫的multiprocessing包來嘗試多執行緒的操作,在python中呼叫多執行緒要使用multiprocessing.dummy,如果是多程序則去掉...

多執行緒程式設計模型

在學習muduo網路庫前,應該先熟悉一下多執行緒網路服務程式設計模型。在6.6.2節介紹了11種方案。方案0到方案4用的是阻塞i o。方案5到方案11用的都是非阻塞i o。方案0 accept read write 方案0不是併發模型,只是乙個迴圈處理。用 表示的話,可以表示為 while true...