Python中的模塊(.py文件)在創建之初會自動加載一些內建變量,__name__就是其中之一。Python模塊中通常會定義很多變量和函數,這些變量和函數相當于模塊中的一個功能,模塊被導入到別的文件中,可以調用這些變量和函數。那么這時 __name__ 的作用就彰顯了,它可以標識模塊的名字,可以顯示一個模塊的某功能是被自己執行還是被別的文件調用執行,假設模塊A、B,模塊A自己定義了功能C,模塊B調用模塊A,現在功能C被執行了:

創新互聯2013年開創至今,先為寶安等服務建站,寶安等地企業,進行企業商務咨詢服務。為寶安企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。
如果C被A自己執行,也就是說模塊執行了自己定義的功能,那么 __name__=='__main__'
如果C被B調用執行,也就是說當前模塊調用執行了別的模塊的功能,那么__name__=='A'(被調用模塊的名字)
其實換一種說法也就是表示當前程序運行在哪一個模塊中。
相關推薦:《Python入門教程》
下面舉例說明:
首先自定義模塊Student,在模塊中定義功能Differ()
然后先自身執行,結果如下, __name__=='__main__'
然后B調用執行,結果 __name__=='Student'
上面出兩次結果,是因為python中導入模塊會先將文件執行一遍,如下圖:
到這兒可能有人已經注意到,上面的 __main__ 在python中作可以為函數的入口,而實際工程常用 if __name__=='__main__'來表示整個工程開始運行的入口。此外你如果不想讓功能的某部分被別的模塊調用執行,比如我自定的模塊Student里的‘我的密碼是xxx’,只有自己執行才可以打印密碼。所有你可以把部分寫在if語句里,只有__name__=='__main__'的時候才能執行。這個可以這么理解,在if語句之外代碼是最外層的,有點“全局變量”的意思,放入if里面就成了私有的了。
python代碼是順序執行的,是自上而下的,它沒有類似C的main函數這樣的入口函數。
這屬于一種誤解,人工智能的核心算法是完全依賴于C/C++的,因為是計算密集型,需要非常精細的優化,還需要GPU、專用硬件之類的接口,這些都只有C/C++能做到。所以某種意義上其實C/C++才是人工智能領域最重要的語言。
Python是這些庫的API binding,使用Python是因為CPython的膠水語言特性,要開發一個其他語言到C/C++的跨語言接口,Python是最容易的,比其他語言的ffi門檻要低不少,尤其是使用Cython的時候。其他語言的ffi許多都只能導入C的函數入口點,復雜的數據結構大多只能手工用byte數組拼起來,如果還需要回調函數輸入那就無計可施了。而CPython的C API是雙向融合的,可以直接對外暴露封裝過的Python對象,還可以允許用戶通過繼承這些自定義對象來引入新特性,甚至可以從C代碼當中再調用Python的函數(當然,也有一定的條件限制)。不過這也是PyPy這樣的JIT解釋器的一個障礙。
而且Python歷史上也一直都是科學計算和數據分析的重要工具,有numpy這樣的底子,因為行業近似所以選擇API binding語言的時候會首選Python,同時復用numpy這樣的基礎庫既減少了開發工作量,也方便從業人員上手。
C#語言由于需要編譯后才可以在 CoreCLR 虛擬機中運行。因此在 SCF 中的使用方式,和 Python、Node.js 這類腳本型語言不同,和Java一樣有如下限制:
不支持上傳代碼:使用 C# 語言,僅支持上傳已經開發完成,編譯打包后的 zip 包。SCF 環境不提供 C# 的編譯能力。
不支持在線編輯:不能上傳代碼,所以不支持在線編輯代碼。CoreCLR 運行時的函數,在代碼頁面僅能看到再次通過頁面上傳或 COS 提交代碼的方法。
自定義.NET Custom runtime
Custom Runtime的封裝工作就是要把各種trigger 的事件封裝一個.NET Standard庫,開發云函數。自 .NET Core 2.0 開始, 提供了名為?IHostedService?的新接口,有助于輕松實現托管服務,文章《ASP.NET Core 3.x控制IHostedService啟動順序淺探》有深入的實現分析,基于IHostedService?實現一個SCFHostService:
這里我們把SCF的Custom Runtime 抽象到ISCFHost 中
在SCFHost 類中完成Custom Runtime的業務處理,接收來自SCF 的事件,轉發給函數進行處理,函數處理的接口 IFunctionInvoker:
默認實現了FunctionInvoker 把請求信息 返回給 SCF:
responseBody 代表了SCF函數的不同Trigger事件信息,我們可以根據不同的Trigger 定義不同的處理函數,例如我們處理HttpTrigger的函數為HttpFunctionInvoker:
上面我們已經完成了最小的MVP封裝,利用.NET Core的依賴注入容器封裝起來,我們定義了一個ISCFBuilder 來組裝函數的配置和服務:
SCF 云函數開發
我們使用.NET Core的控制臺程序來開發云函數,創建一個控制臺程序, 引用Yhd.TencentCloud.SCF 包,把Program.cs 替換成類似代碼:
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System.Threading.Tasks;
using Yhd.FindJob;
using Yhd.TencentCloud.SCF.Executors;
public class Index
{
static async Task Main(string[] args)
{
var builder = new HostBuilder()
.ConfigureSCF((context, scfbuilder) =
{
var configuration = scfbuilder.Configuration;
scfbuilder.Services.AddFindJob(configuration);
scfbuilder.Services.AddEasyCaching(options =
{
options.UseInMemory();
//use redis cache that named redis
options.UseRedis(configuration)
.WithJson()
;
});
scfbuilder.Services.AddTransientIFunctionInvoker, JobsHttpFunctionInvoker();
})
.UseConsoleLifetime();
var host = builder.Build();
using (host)
{
await host.RunAsync();
}
}
}
通過ConfigureSCF 可以添加函數的依賴服務,例如上面例子中的EasyCaching 以及函數的服務, 關鍵的一句是? scfbuilder.Services.AddTransientIFunctionInvoker, JobsHttpFunctionInvoker();? 把函數的處理邏輯使用JobsHttpFunctionInvoker 進行注入。把函數的配置放到appsettings.json。
現在SCF 云函數有個問題是本地Windows開發問題,本地的函數邏輯的測試可以通過單元測試進行。還有函數打包必須在Linux環境下進行。
云函數部署
創建 bootstrap 文件
bootstrap 是運行時入口引導程序文件,Custom Runtime 加載函數時固定檢索 bootstrap 同名文件,并執行該程序來啟動 Custom Runtime 運行時。Custom Runtime 支持任意語言及版本開發運行函數,主要基于 bootstrap 引導程序由開發者自定義實現。其中,bootstrap 需具備以下條件:
需具有可執行權限。
能夠在 SCF 系統環境(CentOS 7.6)中運行。
下面這個是 .NET Core 3.1的云函數 bootstrap 文件
#!/bin/sh
echo "Start dotnet bootstrap ~~~"
export DOTNET_ROOT=/opt/rt
export PATH=$(pwd):/opt/rt:${PATH}
dotnet ./index/bin/Release/netcoreapp3.1/index.dll
index.dll 就是我們開發的函數文件。
成功創建?bootstrap?和?函數文件?后,目錄結構如下所示:
├ bootstrap
└ index
需要在Linux 下執行以下命令,設置文件可執行權限,并將其添加至 ZIP 包
部署包準備好后,可以通過?云函數控制臺?來創建和發布函數
在騰訊云云函數計算上部署.NET Core 3.1的更多相關文章
阿里云函數計算上部署.NET Core 3.1
使用阿里云ECS或者其他常見的VPS服務部署應用的時候,需要手動配置環境,并且監測ECS的行為,做補丁之類的,搞得有點復雜.好在很多云廠商(阿里云.Azure等)提供了Serverless服務,借助于 ...
IIS上部署Net.Core
部署: 1.安裝vc_redist.x64vc_redist.x64 2.安裝DotNetCore.1.0.0.RC2-WindowsHosting 3.安裝DotNetCore.1.0.0-SDK. ...
So Easy - 在Linux服務器上部署 .NET Core App
.NET Core?是微軟提供的免費.跨平臺和開源的開發框架,可以構建桌面應用程序.移動端應用程序.網絡應用程序.物聯網應用程序和游戲應用程序等.如果你是 Windows 平臺下的 dotnet 開發 ...
在IIS上部署 .Net Core 3.0 項目踩坑實錄
在IIS上部署 .Net Core 3.0 項目的主要流程有: 安裝并啟用IIS 安裝AspNetCoreModuleV2 添加.配置網站 設置應用程序池 通過VS發布 一.安裝并啟用IIS: 安裝了 ...
在CentOS 8 上 部署 .Net Core 應用程序
在Centos 8 上 部署 .Net Core 應用程序 ? ? -- 記錄篇 1.更新dnf 源 1 dnf update 2.安裝 Asp.Net Core 運行時 1 dnf install ...
在騰訊云amp;阿里云上部署JavaWeb項目(Tomcat+MySQL)
之前做項目都是在本地跑,最近遇到需要在在云服務器(阿里云或者騰訊云都可以,差不多)上部署Java Web項目的問題,一路上遇到了好多坑,在成功部署上去之后寫一下部署的步驟與過程,一是幫助自己總結記憶, ...
ASP.NET Core學習之四 在CentOS上部署.net core
一.安裝CentOs 以前在大學學過linux,但是對命令行總是有一種深深的排斥感,幾年之后,還是又回來了. 1.下載 現在沒法FQ,就算是FQ網速也是蝸牛一樣慢,我使用阿里云的鏡像站進行下載速度還是 ...
【netcore入門】在Windows IIS上部署.NET Core 2.1項目
部署之前先檢查下面2個先決條件是否滿足 1.安裝了 IIS 模塊 win7 在 控制面板→程序和功能→打開或關閉Windows功能→勾選Internet 信息服務(Internet Informati ...
CentOS7系統上部署.net core程序
一.準備工作 首先安裝 xshell?和 xftp ,前者用于SSH連接Linux服務器,后者用于FTP上傳下載文件. xshell和xftp個人使用是免費的,下載地址 之后分別輸入用戶名和密碼登錄主 ...
1、首先打開騰訊云,點擊“云產品”然后選擇“云函數”。
2、其次點擊“函數服務”然后新建云函數,設置好函數名稱。
3、最后選擇python3.6的版本,選擇空白函數,即可調用騰訊云函數。
在我看來,Python 可以做任何事情。無論是從入門級選手到專業級選手都在做的爬蟲,還是Web 程序開發、桌面程序開發還是科學計
算、圖像處理,Python都可以勝任。
Python為我們提供了非常完善的基礎代碼庫,覆蓋了網絡、文件、GUI、數據庫、文本等大量內容,被形象地稱作“內置電池(Batteries
included)”。用Python開發,許多功能不必從零編寫,直接使用現成的即可。
除了內置的庫外,Python還有大量的第三方庫,也就是別人開發的,供你直接使用的東西。當然,如果你開發的代碼通過很好的封裝,
也可以作為第三方庫給別人使用。
許多大型網站就是用Python開發的,例如YouTube、Instagram,還有國內的豆瓣。很多大公司,包括Google、Yahoo等,甚至
NASA(美國航空航天局)都大量地使用Python。
龜叔給Python的定位是“優雅”、“明確”、“簡單”,所以Python程序看上去總是簡單易懂,初學者學Python,不但入門容易,而且
將來深入下去,可以編寫那些非常非常復雜的程序。
總的來說,Python的哲學就是簡單優雅,盡量寫容易看明白的代碼,盡量寫少的代碼。如果一個資深程序員向你炫耀他寫的晦澀難懂、
動不動就幾萬行的代碼,你可以盡情地嘲笑他。
python學習網,免費的python學習網站,歡迎在線學習!
文章題目:云函數python入口,云函數 python 第三方庫
網頁鏈接:http://m.kartarina.com/article36/heejpg.html
成都網站建設公司_創新互聯,為您提供、搜索引擎優化、云服務器、網站設計、微信小程序、自適應網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯