程序和佇列練習

2022-07-27 08:00:14 字數 2426 閱讀 3204

#

!/usr/bin/env python3

#-*- coding: utf-8 -*-

#@time : 2020/5/31 17:24

#@author : "小多肉"

#@email : [email protected]

#@file : 程序和佇列.py

#@software: pycharm

#todo:

"""一、使用佇列和程序完成下面要求

1、用乙個佇列來儲存資料

2、建立乙個專門生產資料的程序類,當佇列中資料數量少於50時,開始生產資料,每次生產200個資料,新增到佇列中,

每生產完一輪 暫停1秒

3、建立乙個專門獲取資料的程序類,當 佇列中資料數量 大於10時就開始獲取,,迴圈獲取,每次獲取20個。

當佇列中資料數量 少於10的時候,暫停2秒

4、 建立乙個程序生產資料 ,5個程序獲取資料

"""import

random

import

time

from multiprocessing import

process, queue

class

gendatawork(object):

def__init__

(self, queue):

self.q =queue

defgen_data(self):

"""佇列長度小於50時,隨機生成資料200個資料

"""if self.q.qsize() < 50:

print("

佇列資料小於50個")

for i in range(200):

self.q.put(random.random())

print("

生成200個資料的任務已完成,暫停1秒。")

time.sleep(1)

class

getdatawork:

def__init__

(self,queue):

self.q =queue

defget_data(self):

"""獲取資料

"""while

true:

if self.q.qsize() > 10:

for i in range(20):

data =self.q.get()

print(f"

第次獲取的資料是")

elif self.q.qsize() < 10:

print("

佇列資料少於10個,暫停2秒")

time.sleep(2)

break

else

:

break

defdecorator(fun):

start_time =time.time()

print("

-------start--------

", start_time)

fun(*args, **kwargs)

end_time =time.time()

print("

-------end--------

", end_time)

dur_time = end_time -start_time

print(f"

函式的執行時間為:")

return

@decorator

defmain(q):

p_list =

p1 = process(target=gendatawork(q).gen_data)

p1.start()

for i in range(5):

p = process(target=getdatawork(q).get_data)

p.start()

p1.join()

for p in

p_list:

p.join()

if__name__ == '

__main__':

q =queue()

main(q)

在此遇到 乙個被氣哭的問題。mac os居然不支援queue.qsiez(),會報錯下面錯誤:

file "

/library/frameworks/python.framework/versions/3.7/lib/python3.7/multiprocessing/queues.py

", line 117, in

qsize

return self._maxsize -self._sem._semlock._get_value()

notimplementederror

除錯了一晚上………………這個坑挖的我無發可脫。

求躲坑秘籍。

練習12 棧和佇列

棧 先進後出 功能 入棧 出棧 取棧頂元素 判斷棧是否為空 顯示棧的元素 class stack def init self self.stack defpush self,value param value 入棧元素 return return true defpop self 判斷棧是否為空 i...

練習 LINUX程序間通訊之訊息佇列MSG

繼續堅持,或許不能深刻理解,但至少要保證有印象。訊息佇列 也叫做報文佇列 能夠克服早期unix通訊機制的一些缺點。作為早期unix通訊機制之一的訊號能夠傳送的資訊量有限,後來雖然posix 1003.1b在訊號的實時性方面作了拓廣,使得訊號在傳遞資訊量方面有了相當程度的改進,但是訊號這種通訊方式更像...

執行佇列與程序佇列

在一定時間內 cpu所能處理和承載的程序數量是有限的,這個數值與cpu的效能有直接關係,或者說這個數值標誌著cpu的效能高低,反應到實際的計算機使用上來就是更 高效能的cpu可以在同一時間處理更多程序內容。所以說,一般當你去電腦城買個人電腦的時候導購就會問你電腦的大致用途,其實他們這個時候是在幫你計...