十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
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学习网站,欢迎在线学习!