#!/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可以在同一時間處理更多程序內容。所以說,一般當你去電腦城買個人電腦的時候導購就會問你電腦的大致用途,其實他們這個時候是在幫你計...