C# + ArcEngine 常用方法(不定时更新)
1、Arcengine调用GP服务,抛出异常方法
object sev = null;
try
{
Application.DoEvents();
gp.Execute(gpBuildPyramidsandStatistics, null);
Application.DoEvents();
Console.WriteLine(gp.GetMessages(ref sev));
}
catch (Exception ex)
{
// Print geoprocessing execution error messages.
MessageBox.Show(gp.GetMessages(ref sev));
}
//ps:调用GP服务处理数据库中的数据,必须添加gp的环境变量workspace.http://www.ithao123.cn/content-7464230.html
//Geoprocessor GP = new Geoprocessor();
//string sWorkPath;
//IWorkspace pWork;
//if(pWork.Type == esriWorkspaceType.esriRemoteDatabaseWorkspace)
//{
//sWorkPath = System.IO.Path.Combine(Application.StartupPath,"gpenvwk.sde");
//pWork.WorkspaceFactory.Create(Application.StartupPath,"gpenvwk.sde",pWork.ConnectionProperties,0);
//}
//else
//{
//sWorkPath = pWork.PathName;
//}
//GP.SetEnvironmentValue("workspace",sWorkPath);
//GP.OverwriteOutput = true;
2、日志生成类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Windows.Forms; namespace Geoway.IDB.FileCheck.Utility
{
///<summary>
///目的:日志操作类
///创建人:jwh
///创建日期:2016/7/11
///修改描述:
///修改人:
///修改日期:
///备注:
///</summary>
public class LogExport
{
private static object _lockerForLog = new object();
public static string LOGPATH = Application.StartupPath + "\\log\\checklog";//日志文件夹 /// <summary>
/// 记录日志
/// </summary>
/// <param name="content"></param>
/// <param name="logPath"></param>
public static void SaveLog(string content, string logPath = "")
{
try
{
if (string.IsNullOrEmpty(logPath))
{
logPath = LOGPATH;
} lock (_lockerForLog)
{
FileStream fs;
if (!Directory.Exists(logPath))
{
Directory.CreateDirectory(logPath);
}
fs = new FileStream(Path.Combine(logPath, DateTime.Now.ToString("yyyyMMdd") + ".log"), FileMode.OpenOrCreate);
StreamWriter streamWriter = new StreamWriter(fs);
streamWriter.BaseStream.Seek(, SeekOrigin.End);
streamWriter.WriteLine(DateTime.Now.ToString("yyyy-MM-dd-HH:mm:ss") + " " + content);
streamWriter.Flush();
streamWriter.Close();
fs.Close();
}
}
catch
{
}
}
}
}
3、获取数据库中的镶嵌数据集
/// <summary>
/// 获取界面上选择的镶嵌数据集
/// </summary>
/// <returns></returns>
public IMosaicDataset GetMosaicDataset()
{
try
{
_selMosicName = cmbMosicData.SelectedItem.ToString(); IPropertySet propertySet = new PropertySetClass();
propertySet.SetProperty("SERVER", "");
propertySet.SetProperty("INSTANCE", "sde:oracle11g:XXX.XXX.XXX/db11g");
propertySet.SetProperty("USER", "XXX"); propertySet.SetProperty("PASSWORD", "XXX");
propertySet.SetProperty("DATABASE", "");
propertySet.SetProperty("VERSION", "");
IWorkspaceFactory2 workspaceFactory2 = new SdeWorkspaceFactoryClass();
IWorkspace pWorkspace = workspaceFactory2.Open(propertySet, ); IMosaicDataset pMosicDataset = null;
IMosaicWorkspaceExtensionHelper pMosaicWsExHelper = new MosaicWorkspaceExtensionHelperClass();
IMosaicWorkspaceExtension pMosaicWsExt = pMosaicWsExHelper.FindExtension(pWorkspace);
if (pMosaicWsExt != null)
{
try
{
pMosicDataset = pMosaicWsExt.OpenMosaicDataset(_selMosicName);
}
catch (Exception ex)
{
return pMosicDataset;
}
}
return pMosicDataset;
}
catch (Exception ex)
{
return null;
}
}
4、跨线程调用控件的属性和方法
//定义两个委托
delegate void SetTextValueCallback(Control oControl, string propName, object propValue);
delegate void SetUCLogValueHandler(string log, EnumLogType enumLogType); /// <summary>
/// 设置控件参数
/// </summary>
/// <param name="oControl">控件</param>
/// <param name="propName">参数名称</param>
/// <param name="propValue">参数值</param>
private void SetTextPropertyValue(Control oControl, string propName, object propValue)
{
if (oControl.InvokeRequired)
{
SetTextValueCallback d = new SetTextValueCallback(SetTextPropertyValue);
oControl.Invoke(d, new object[] { oControl, propName, propValue });
}
else
{
Type t = oControl.GetType();
System.Reflection.PropertyInfo[] props = t.GetProperties();
foreach (System.Reflection.PropertyInfo p in props)
{
if (p.Name.ToUpper() == propName.ToUpper())
{
p.SetValue(oControl, propValue, null);
}
}
}
} /// <summary>
/// 设置UCLog控件输出
/// </summary>
/// <param name="log"></param>
/// <param name="enumLogType"></param>
private void SetUClogValue(string log, EnumLogType enumLogType)
{
if (_ucLog.InvokeRequired == true)
{
SetUCLogValueHandler set = new SetUCLogValueHandler(_ucLog.AddMsg);//委托的方法参数应和SetCalResult一致
_ucLog.Invoke(set, new object[] { log, enumLogType }); //此方法第二参数用于传入方法,代替形参result
} } //实例化
SetTextValueCallback setControlvalue = new SetTextValueCallback(SetTextPropertyValue);
SetUCLogValueHandler setUClogValue = new SetUCLogValueHandler(SetUClogValue);
//调用
setControlvalue(_progresslabal, "Text", "正在创建金字塔... ...");
setUClogValue(_selMosicName + "数据BuildPyramids处理成功." + log, EnumLogType.SuccessAudit);
5、创建XML文件
public static void CreateXmlFile(string xmlPath, string rootName)
{
XmlDocument xmlDoc = new XmlDocument();
//创建类型声明节点
XmlNode node = xmlDoc.CreateXmlDeclaration("1.0", "GB2312", "");
xmlDoc.AppendChild(node);
//创建根节点
XmlNode root = xmlDoc.CreateElement(rootName);
xmlDoc.AppendChild(root); CreateNode(xmlDoc, root, "NodeName", "value"); try
{
xmlDoc.Save(xmlPath);
}
catch (Exception ex)
{
}
} /// <summary>
/// 创建节点
/// </summary>
/// <param name="xmldoc"></param> xml文档
/// <param name="parentnode"></param>父节点
/// <param name="name"></param> 节点名
/// <param name="value"></param> 节点值
///
public static void CreateNode(XmlDocument xmlDoc, XmlNode parentNode, string name, string value)
{
XmlNode node = xmlDoc.CreateNode(XmlNodeType.Element, name, null);
node.InnerText = value;
parentNode.AppendChild(node);
}
6、我们在执行控制台应用程序或者其他程序时,有时候加了断点也无法调试,一个可能是我们设置了新的项目生成配置,而该配置默认的不生成.pdb文件,导致无法调试,解决方案是在“生成”页面的“高级”里把输出——>调试信息改成full。
7、查询用户job的运行状态
select job,what,failures,broken from user_jobs
8、arcengine删除表
/// <summary>
/// 从工作空间中删除指定表
/// </summary>
/// <param name="pWorkSpace"></param>
/// <param name="tableName"></param>
/// <returns></returns>
public static bool DeleteTable(IWorkspace pWorkspace,String tableName)
{
try
{
IFeatureWorkspace pFeatureworkspace = pWorkspace as IFeatureWorkspace;
IFeatureClass pFeatureClass = pFeatureworkspace.OpenFeatureClass(tableName);//存在删除
if (pFeatureClass != null)
{
IDataset pDataset = pFeatureClass as IDataset;
if (pDataset.CanDelete())
{
pDataset.Delete();
return true;//删除成功
}
}
}
catch { }
return false;//删除失败
}
9、C#向Oracle的Blob字段插入值(引用自网络)
(1)先插入其它字段,BLOB字段初始化的时候,先初始化一个EMPTY_BLOB(),相当于一个BLOB对象的空壳,内部啥也没有,但是是一个对象。
(2)SELECT <BLOB字段> FROM <表名称> WHERE <关键字>=<插入关键值> FOR UPDATE;--FOR UPDATE是必须的。
(3)如果在程序中就直接得到一个BLOB对象的引用(相当于指针),如果过程中,上述修改为SELECT INTO到一个BLOB类型的变量中,其实也是BLOB对象的指针,然后对这个BLOB进行编辑,过程中对其进行编辑使用DBMS_LOB包来完成编辑工作,程序中将前端提交的内容(可能是图片或者上传文件直接可以转为byte[]数组、可能是文本字符串需要根据相应字符集转义为byte[]数组),通过java.sql.Blob接口对应的驱动实现类内部的setBytes(....)方法来完成写入。
(4)不论是程序还是过程,使用UPDATE <表名称> WHERE <关键字>=<插入关键值>; COMMIT;即可完成编辑过程。
static void Main(string[] args)
{
int nSize = ;
byte[] bArray = new byte[nSize];
for (int i = ; i < nSize; i++)
{
bArray[i] = ;
} /*
* 须使用OracleClient命名空间
* 须安装支持OLEDB 的ORACLE 客户端
*/
string sConn = "Data Source=192.168.0.5;User ID=hpbjjy;Unicode=True;Password=hpbjjy";
OracleConnection conn = new OracleConnection(sConn);
OracleTransaction tra = null;
try
{
conn.Open();
Console.WriteLine("打开成功!");
OracleCommand com = conn.CreateCommand();
tra = conn.BeginTransaction();
com.Transaction = tra; /*
* 先使用查询获得该BLOB字段的对象
* 同时使用for update 锁定该字段,否则无法修改
*/
string SQL = "select tag2 from sysconf where name='HotelName' for update"; // tag2字段类型为BLOB
com.CommandText = SQL;
OracleDataReader reader = com.ExecuteReader();
OracleLob lob = OracleLob.Null;
reader.Read();
lob = reader.GetOracleLob(); // 获取BLOB对象 lob.Write(bArray, , bArray.Length); // 将数据写入该对象
SQL = "update sysconf set tag2=:t where name='HotelName'";
com.CommandText = SQL;
com.Parameters.Add("t", OracleType.Blob).Value = lob;
com.ExecuteNonQuery(); tra.Commit();
Console.WriteLine("成功完成!");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
if (tra != null)
tra.Rollback();
} if (conn.State == ConnectionState.Open)
conn.Close();
Console.Read();
}
10、Dev Treelist使用方法
右击节点信息
TreeListHitInfo hInfo = treeList1.CalcHitInfo(new Point(e.X, e.Y));
TreeListNode node = hInfo.Node;
treeList1.FocusedNode = node;
代码初始化Treelist
DataTable dt = new DataTable();
DataColumn dcOID = new DataColumn("KeyFieldName", Type.GetType("System.Int32"));
DataColumn dcParentOID = new DataColumn("ParentFieldName", Type.GetType("System.Int32"));
DataColumn dcNodeName = new DataColumn("NodeName", Type.GetType("System.String"));
DataColumn dcNodeCode = new DataColumn("NodeCode", Type.GetType("System.String")); dt.Columns.Add(dcOID);
dt.Columns.Add(dcParentOID);
dt.Columns.Add(dcNodeName);
dt.Columns.Add(dcNodeCode); DataRow dr1 = dt.NewRow();
dr1["KeyFieldName"] = ;
dr1["ParentFieldName"] = ;
dr1["NodeName"] = "第三次农业普查";
dr1["NodeCode"] = "根节点编码";
dt.Rows.Add(dr1); DataRow dr2 = dt.NewRow();
dr2["KeyFieldName"] = ;
dr2["ParentFieldName"] = ;
dr2["NodeName"] = "农作物总播种面积";
dr2["NodeCode"] = "节点子节点编码2";
dt.Rows.Add(dr2); DataRow dr3 = dt.NewRow();
dr3["KeyFieldName"] = ;
dr3["ParentFieldName"] = ;
dr3["NodeName"] = "主要农作物播种面积";
dr3["NodeCode"] = "节点子节点编码3";
dt.Rows.Add(dr3); treeList_SNP.BeginUnboundLoad();
treeList_SNP.KeyFieldName = "KeyFieldName";
treeList_SNP.ParentFieldName = "ParentFieldName";
treeList_SNP.DataSource = dt;
treeList_SNP.EndUnboundLoad();
treeList_SNP.ExpandAll();
TreeList_SNP = treeList_SNP;
treeList_SNP.Nodes.FirstNode.Nodes[].Checked = true;
http://blog.163.com/china__xuhua/blog/static/199723169201203111653783/ http://www.dxper.net/thread-62-1-1.html http://www.jb51.net/article/53337.htm
11、DEV XtraForm 皮肤设置
在启动的main函数里加上:
BonusSkins.Register();
AppearanceObject.DefaultFont = new Font("微软雅黑", );
UserLookAndFeel.Default.SetSkinStyle("标准风格");
SkinManager.EnableFormSkins();
引用:using DevExpress.LookAndFeel;
using DevExpress.Skins;
using DevExpress.UserSkins;
using DevExpress.Utils;
using System.Drawing;
12、两个类之间实时传值(利用委托)
假设FormA窗体中有一个数据处理的ProcessBar需要实时更新状态,但是FormA中的数据处理方法在ClassA,这样,我们就行要根据ClassA中方法执行的状态,
实时给FormA中的ProcessBar传值; 在ClassA中定义如下: //委托
public delegate void ExecutingEeventHandler(int nodeIndex,int nodeCount); /// <summary>
/// 传递processbar序号
/// </summary>
public event ExecutingEeventHandler Executing; //事件触发函数
private void OnExcuting(int index, int nodeCount)
{
if (Executing != null)
{
Executing(index, nodeCount);
}
} 在ClassA的执行方法中加入事件触发函数:OnExcuting(index, catalogNodeLists.Count); 在FormA中把ProcessBar状态更新的函数注册到ExecutingEeventHandler中;
classA.Executing += new ClassA.ExecutingEeventHandler(expOper_Executing);
void expOper_Executing(int nodeIndex, int nodeCount)
{
_Processbar.SetProgress(nodeIndex, nodeCount);
}
13、dev treelist 只允许同级拖拽,不变成子目录设置
private void treeList1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
TreeListNode dragNode, targetNode;
TreeList tl = sender as TreeList;
Point p = tl.PointToClient(new Point(e.X, e.Y));
dragNode = e.Data.GetData(typeof(TreeListNode)) as TreeListNode;
targetNode = tl.CalcHitInfo(p).Node;
tl.SetNodeIndex(dragNode, tl.GetNodeIndex(targetNode));
e.Effect = DragDropEffects.None;
}
14、GridView 列对齐
col.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
15、设置TableLayoutPanel等宽高(http://blog.csdn.net/langyuewu/article/details/38865423#),最好在代码中初始化TableLayoutPanel
private void InitLayoutDemo()
{
TableLayoutPanel demoLayoutPanel = new TableLayoutPanel();
demoLayoutPanel.Dock = DockStyle.Fill;
this.Controls.Add(demoLayoutPanel);
int row = , col = ;
DynamicLayout(demoLayoutPanel, row, col);
for (int i = ; i < row; i++)
{
for (int j = ; j < col; j++)
{
Button btn = new Button();
btn.Text = string.Format("({0},{1})", i, j);
btn.Dock = DockStyle.Fill;
demoLayoutPanel.Controls.Add(btn);
demoLayoutPanel.SetRow(btn, i);
demoLayoutPanel.SetColumn(btn, j);
}
}
} /// <summary>
/// 动态布局
/// </summary>
/// <param name="layoutPanel">布局面板</param>
/// <param name="row">行</param>
/// <param name="col">列</param>
private void DynamicLayout(TableLayoutPanel layoutPanel, int row, int col)
{
layoutPanel.RowCount = row; //设置分成几行
for (int i = ; i < row; i++)
{
layoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
}
layoutPanel.ColumnCount = col; //设置分成几列
for (int i = ; i < col; i++)
{
layoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
}
}
15、XML操作
最常见的XML数据类型有:Element, Attribute,Comment, Text.
Element, 指形如<Name>Tom<Name>的节点。它可以包括:Element, Text, Comment, ProcessingInstruction, CDATA, and EntityReference.
Attribute, 指在<Employee >中的粗体部分。
Comment,指形如:<!-- my comment --> 的节点。
Text,指在<Name>Tom<Name>的粗体部分。
在XML中,可以用XmlNode对象来参照各种XML数据类型。
2.1 查询已知绝对路径的节点(集)
objNodeList = objDoc.SelectNodes(“Company/Department/Employees/Employee”)
或者
objNodeList = objNode.SelectNodes(“/Company/Department/Employees/Employee”)
以上两种方法可返回一个NodeList对象,如果要返回单个节点可使用SelectSingleNode方法,该方法如果查询到一个或多个节点,返回第一个节点;如果没有查询的任何节点返回 Nothing。例如:
objNode = objNode.SelectSingleNode(“/Company/Department/Employees/Employee”)
If Not (objNode is Nothing) then
‘- Do process
End If
2.2 查询已知相对路径的节点(集)
可使用类似于文件路径的相对路径的方式来查询XML的数据
objNode = objDoc.SelectSingleNode(“Company/Department”)
objNodeList = objNode.SelectNodes(“../Department)
objNode = objNode.SelectNode(“Employees/Employee”)
2.3 查询已知元素名的节点(集)
在使用不规则的层次文档时,由于不知道中间层次的元素名,可使用//符号来越过中间的节点,查询其子,孙或多层次下的其他所有元素。例如:
objNodeList = objDoc.SelectNodes(“Company//Employee”)
2.4 查询属性(attribute)节点
以上的各种方法都返回元素(element)节点(集),返回属性(attribute),只需要采用相应的方法,在属性名前加一个@符号即可,例如:
objNodeList = objDoc.SelectNodes(“Company/Department/Employees/Employee/@id”)
objNodeList = objDoc.SelectNodes(“Company//@id”)
2.5 查询Text节点
使用text()来获取Text节点。
objNode = objDoc.SelectSingleNode(“Company/Department/Deparmt_Name/text()”)
2.6 查询特定条件的节点
使用[]符号来查询特定条件的节点。例如:
a. 返回id号为 10102的Employee节点
objNode = objDoc.SelectSingleNode(“Company/Department/Employees/Employee[@id=’’]”)
b. 返回Name为Zhang Qi的Name 节点
objNode = objDoc.SelectSingleNode(“Company/Department/Employees/Employee/Name[text()=’Zhang Qi’]”)
c. 返回部门含有职员22345的部门名称节点
objNode = objDoc.SelectSingleNode("Company/Department[Employees/Employee/@id='22345']/Department_Name")
2.7 查询多重模式的节点
使用 | 符号可以获得多重模式的节点。例如:
objNodeList = objDoc.SelectNodes(“Company/Department/Department_Name | Company/Department/Manager”)
2.8 查询任意子节点
使用*符号可以返回当前节点的所有子节点。
objNodeList = objDoc.SelectNodes(“Company/*/Manager)
或者
objNodeList = objNode.ChildNodes
3 XML数据的编辑
3.1 增加一个元素的属性(attribute)节点
Dim objNodeAttr As XmlNode
objNodeAttr = objDoc.CreateAttribute("id", Nothing)
objNodeAttr.InnerXml = "101"
objNode.Attributes.Append(objNodeAttr)
3.2 删除一个元素的属性
objNode.Attributes.Remove(objNodeAttr)
3.3 增加一个子元素(Element)
Dim objNodeChild As XmlNode
objNodeChild = objDoc.CreateElement(Nothing, "ID", Nothing)
objNodeChild.InnerXml = "101"
objNode.AppendChild(objNodeChild)
3.4 删除一个子元素
objNode.RemoveChild(objNodeChild)
3.5 替换一个子元素
objNOde.ReplaceChild(newChild,oldChild)
4 参考数据
<?xml version="1.0" encoding="UTF-8"?>
<Company>
<Department >
<Department_Name>Cai WuBu</Department_Name>
<Manager>Zhang Bin</Manager>
<Employees>
<Employee >
<Employee_ID>12345</Employee_ID>
<Name>Zhang Bin</Name>
<Gender>male</Gender>
</Employee>
<Employee >
<Employee_ID>10101</Employee_ID>
<Name>Zhang QI</Name>
<Gender>female</Gender>
</Employee>
<Employee >
<Employee_ID>10102</Employee_ID>
<Name>Zhang Xia</Name>
<Gender>male</Gender>
</Employee>
<Employee >
<Employee_ID>10201</Employee_ID>
<Name>ZhangChuang</Name>
<Gender>male</Gender>
</Employee>
<Employee >
<Employee_ID>10202</Employee_ID>
<Name>Zhang Jun</Name>
<Gender>male</Gender>
</Employee>
</Employees>
</Department>
<Department >
<Department_Name>KaiFa Bu</Department_Name>
<Manager>Wang Bin</Manager>
<Employees>
<Employee >
<Employee_ID>22345</Employee_ID>
<Name>Wang Bin</Name>
<Gender>male</Gender>
</Employee>
<Employee >
<Employee_ID>20101</Employee_ID>
<Name>Wang QI</Name>
<Gender>female</Gender>
</Employee>
<Employee >
<Employee_ID>20102</Employee_ID>
<Name>Wang Xia</Name>
<Gender>male</Gender>
</Employee>
<Employee >
<Employee_ID>20201</Employee_ID>
<Name>Wang Chuang</Name>
<Gender>male</Gender>
</Employee>
<Employee >
<Employee_ID>20201</Employee_ID>
<Name>Wang Jun</Name>
<Gender>male</Gender>
</Employee>
</Employees>
</Department>
</Company>
16、shp图层属性表读写效率
http://blog.csdn.net/freewaywalker/article/details/23703863
C# + ArcEngine 常用方法(不定时更新)的更多相关文章
- iOS 属性修饰符记录 --不定时更新
重新审视了一下OC在属性修饰符,特意记录一下来.以后不定时更新 > retain:只有在非ARC下才会有效,所有如果在ARC下使用了retain修饰也白搭 如以下的data属性用retain修饰 ...
- linux下svn定时更新项目
方法一.用shell脚本定时更新项目 1.进入网站的根目录,假设项目位置放在/var/www/test cd /var/www/test 2.建立脚本文件update.sh,分两步进行.首先利 ...
- ASP.NET中设置一个定时器来定时更新 转
asp.net 定时器 比较少用, 中国红木网这是一个相当实用的功能,有了RSS博客镜像,就不需要在多处同时发布博客日志了.比如你同时在新浪上有自己的博客,又同时有自己的个人博客站点,那么你只需要在 ...
- Vivado_MicroBlaze_问题及解决方法_汇总(不定时更新)
Vivado_MicroBlaze_问题及解决方法_汇总(不定时更新) 标签: Vivado 2015-07-03 14:35 4453人阅读 评论(0) 收藏 举报 分类: 硬件(14) 版权声 ...
- Java日志组件logback使用:加载非类路径下的配置文件并设置定时更新
Java日志组件logback使用:加载非类路径下的配置文件并设置定时更新 摘自: https://blog.csdn.net/johnson_moon/article/details/7887449 ...
- [Android Traffic] 调整定时更新的频率(C2DM与退避算法)
转载自: http://blog.csdn.net/kesenhoo/article/details/7395253 Minimizing the Effect of Regular Updates[ ...
- Java专业技能面试问题(不定时更新)
刚看到园友五月的仓颉<面试感悟----一名3年工作经验的程序员应该具备的技能>感觉很不错,不论是为面试跳槽准备,还是打算深化精进自己的技术都可以参考一下.面向工资编程多少也有点道理,虽然技 ...
- Dcloud课程6 php脚本如何在Linux下定时更新数据
Dcloud课程6 php脚本如何在Linux下定时更新数据 一.总结 一句话总结:linux下用crontab命令实现定时任务. 1.linux下执行php脚本用什么命令? 直接用php命令php ...
- 创建yum本地仓库,将阿里仓库同步到本地,并定时更新
很多时候为了加速自己内部的rpm包安装速度,都会搭建自己的yum源仓库,而使用系统光盘自带的源,由于软件版本比较落后,所以不太适用,而大家都在用的阿里仓库比较好用,所以就想到了把阿里仓库的rpm全部拉 ...
- celery介绍、架构、快速使用、包结构,celery执行异步、延迟、定时任务,django中使用celery,定时更新首页轮播图效果实现,数据加入redis缓存的坑及解决
今日内容概要 celery介绍,架构 celery 快速使用 celery包结构 celery执行异步任务 celery执行延迟任务 celery执行定时任务 django中使用celery 定时更新 ...
随机推荐
- Ganglia监控安装配置
172.17.20.123 node1 gmetad.gmond.web 172.17.20.124 node2 gmond 1.服务器安装好epel源后,安装ganglia yum install ...
- (转载)jsp的内部方法jspInit(),_jspService(),jspDestroy()
jspInit(){}:jsp Page被初始化的时候调用该方法,并且该方法仅在初始化时执行一次,所以可以在这里进行一些初始化的参数配置等一次性工作,由作者创建jspDestroy(){}:jsp P ...
- PHP 十问
1.为了保证精度,Mysql中存钱数的字段用什么类型?PHP怎么处理浮点数精度 decimal数据类型来存储钱: 浮点数的精度有限.尽管取决于系统,PHP 通常使用 IEEE 754 双精度格式,则由 ...
- 2.3 进程控制之exec函数族
学习目标:学习使用exec函数族的重要的几个函数 一.引言 进程通过exec函数根据指定的文件名或目录名执行另一个可执行文件,当进程调用exec函数时,该进程的数据段.代码段和堆栈段完全被新程序替换 ...
- django的HttpResponse对象
服务器接收到http协议的请求后,会根据报文创建HttpRequest对象,这个对象不需要我们创建,直接使用服务器构造好的对象就可以.视图的第一个参数必须是HttpRequest对象,在django. ...
- 配置ORACLE的PRO*C环境
1.访问数据库的方法 在ORACLE数据库管理和系统中,有三种访问数据库的方法: ⑴.用SQL*Plus, 它有SQL命令以交互的应用程序访问数据库: ⑵.用第四代语言应用开发工具开 ...
- 2018春季校园招聘笔经面经合集:Java开发岗
2018春季校园招聘笔经面经合集:Java开发岗 以下为精选面经: 美团外卖配送部后台开发面经 nowcoder.com/discuss/76 春招总结,干货满满 nowcoder.com/discu ...
- Anytime项目开发记录1
关于Android APP 应用设计,我并没有接受过系统的学习. 下面,是按照我一直以来的方法来进行编辑. 由于在程序开始之前并没有画类图,这里简单的讲述一下程序是如何设计的. 自己实现了一个Appl ...
- SSH公钥认证(码云)
开发者向码云版本库写入最常用到的协议是 SSH 协议,因为 SSH 协议使用公钥认证,可以实现无口令访问,而若使用 HTTPS 协议每次身份认证时都需要提供口令.使用 SSH 公钥认证,就涉及到公钥的 ...
- Linux-Shell脚本编程-学习-3-Shell编程-shell脚本基本格式
前面两篇文章基本介绍了一部分linux下的基本命令,后面还需要大家自行了解下linux的文件系统的磁盘管理部分,这里就不在写了. 什么是shell编程,我也解释不来,什么是shell脚本了,我理解就是 ...