深度講述Python標準語言特性
下面著重講述學習Python標準語言時碰到的相關難題和問題,以及學習Python標準語言的技巧,如何更好的進行Python標準語言的學習,希望本文能給大家帶來幫助。
模擬中的核心概念是進程。一個進程只是一個對象,它完成某些任務,隨后在它準備完成下一個任務之前有時會等待一會兒。在 SimPy 中,您還可以“鈍化”進程,這意味著在一個進程完成一個任務后,只有當其它進程要求該進程完成其它任務時,它才會去做。
把進程當作嘗試完成一個目標,常常是很有用的。在編寫進程時,通常把它編寫成可以在其中執行多個操作的循環。在每個操作之間,可以插入 Python“yield”語句,它讓模擬調度程序在返回控制之前執行每個等待進程的操作。
進程執行的許多操作取決于資源的使用。資源只是在可用性方面受到限制。在生物學模型中,資源可能是食物供應;在網絡模型中,資源可以是路由器或有限帶寬通道;在我們的市場模擬中,資源是付款通道。資源執行的唯一任務是在任何給定的時間內將它的使用限于一個特定的進程上。
在 SimPy 編程模型下,進程單獨決定它要保留資源的時間有多長,資源本身是被動的。在實際系統中,SimPy 模型可能適合概念性方案,也可能不適合;很容易想象到資源在本質上會限制其利用率(例如,如果服務器計算機在必需的時間幀內沒有獲得滿意的響應,則它會中斷連接)。
但作為編程問題,進程或資源是否是“主動”方就不是特別重要(只要確保您理解了您的意圖)。最后一個 SimPy 類是監控程序。實際上監控程序不是很重要,只不過它很方便。監控程序所做的全部任務就是記錄向它報告的事件,并保存有關這些事件的統計信息(平均值、計數、方差等)。
該庫提供的 Monitor 類對記錄模擬措施是個有用的工具,但您也可以通過您想使用的其它任何技術來記錄事件。事實上,我的示例使 Monitor 子類化,以提供某些(稍微)增強的能力。
當我最初考慮食品雜貨店模型時,我認為模擬可以解答幾個直接問題。例如,我想象店主可能會選擇購買改進的掃描儀(減少 ITEMTIME)?;蛘哌x擇雇傭更多職員(增加 AISLES)。我想只要在每個方案下運行這個模擬(假設雇員和技術成本給定的情況下),并確定上面兩種選擇哪種更能減少成本。
減少一條付款通道不是使平均等待時間增加 1/5 或類似的情況,而是使它增加了大約 4 倍。而且,最不幸的顧客(在這些特定的運行期間)的等待時間從 6 分鐘增加到了 21 分鐘。如果我是經理,我認為了解這個極限情況對顧客滿意度而言是極其重要的,并確定上面兩種選擇哪種更能減少成本。
Python的創始人為Guido van Rossum。1989年圣誕節期間,在阿姆斯特丹,Guido為了打發圣誕節的無趣,決心開發一個新的腳本解釋程序,做為 ABC 語言的一種繼承。之所以選中 Python(大蟒蛇的意思)作為程序的名字,是因為他是一個Monty Python的飛行馬戲團的愛好者。
ABC是由Guido參加設計的一種教學語言。就Guido本人看來,ABC 這種語言非常優美和強大,是專門為非專業程序員設計的。但是ABC語言并沒有成功,究其原因,Guido 認為是非開放造成的。Guido 決心在 Python 中避免這一錯誤(的確如此,Python 與其它的語言如C、C++和Java結合的非常好)。同時,他還想實現在 ABC 中閃現過但未曾實現的東西。
就這樣,Python在Guido手中誕生了。實際上,第一個實現是在Mac機上??梢哉f,Python是從ABC發展起來,主要受到了Modula-3(另一種相當優美且強大的語言,為小型團體所設計的)的影響。并且結合了Unix shell和C的習慣。