发布新日志

  • Python线程编程的两种方式

    2007-09-08 13:39:45

        Python中如果要使用线程的话,python的lib中提供了两种方式。一种是函数式,一种是用类来包装的线程对象。举两个简单的例子希望起到抛砖引玉的作用,关于多线程编程的其他知识例如互斥、信号量、临界区等请参考python的文档及相关资料。

    1、调用thread模块中的start_new_thread()函数来产生新的线程,请看代码:

     # thread_example.py

    import time 
    import thread 
    def timer(no,interval): #自己写的线程函数
        while True:
            print 'Thread :(%d) Time:%s'%(no,time.ctime()) 
            time.sleep(interval)
    def test(): 
        thread.start_new_thread(timer,(1,1))#使用thread.start_new_thread()产生2个新的线程 
        thread.start_new_thread(timer,(2,3))
    if __name__=='__main__':
        test() 
    这个是thread.start_new_thread(function,args[,kwargs])函数原型,其中function参数是你将要调用的线程函数;args是讲传递给你的线程函数的参数,他必须是个tuple类型;而kwargs是可选的参数。线程的结束一般依靠线程函数的自然结束;也可以在线程函数中调用thread.exit(),他抛出SystemExit exception,达到退出线程的目的。
    2、通过调用threading模块继承threading.Thread类来包装一个线程对象。请看代码 #threading_example.py 
    import threading 
    import time 
    class timer(threading.Thread): #我的timer类继承自threading.Thread类 
        def __init__(self,no,interval): 
            threading.Thread.__init__(self) #在我重写__init__方法的时候要记得调用基类的__init__方法 
            self.no=no 
            self.interval=interval 
        def run(self): #重写run()方法,把自己的线程函数的代码放到这里 
            while True: 
                print 'Thread Object (%d), Time:%s'%(self.no,time.ctime()) 
                time.sleep(self.interval) 
    def test(): 
    	threadone=timer(1,1) #产生2个线程对象 
    	threadtwo=timer(2,3) 
    	threadone.start() #通过调用线程对象的.start()方法来激活线程 
    	threadtwo.start() 
    if __name__=='__main__':
    	test() 
    其实thread和threading的模块中还包含了其他的很多关于多线程编程的东西,例如锁、定时器、获得激活线程列表等等,相关资料仔细参考python的文档!
  • 关于python

    2007-09-04 10:13:09

    关于python

    “Python”这个英文单词的发音似“派森”,因此中文可以称之为派森。Python是一个有10年历史的Windows编程语言。Python的创始人为Guido van Rossum。

     

    Python是一种即译式的,互动的,面向对象的编程语言,它包含了模组式的操作,异常处理,动态资料形态,十分高层次的动态资料结构,以及类别的使用。Python揉合了简单的语法和强大的功能。它的语法表达优美易读。它具有很多优秀的脚本语言的特点:解释的,面向对象的,内建的高级数据结构,支持模块和包,支持多种平台,可扩展。而且它还支持交互式方式运行,图形方式运行。它拥有众多的编程界面支持各种操作系统平台以及众多的各类函数库。利用C和C++可以对它进行扩充。个别的应用软件如果需要有一个可程序化界面也可以利用它来做为扩展语言用。最后,Python的可移植度非常高:它可以在许多的Unix类平台上运行,在Mac,MS-DOS,视窗Windows,Windows NT,OS/2,BeOS,以至RISCOS上都有相关的Python版本。

     

    Python核心网站是:  http://www.python.org/ ,其中你可以找到很多资料。如果您第一次使用 Python, 可以下载一个试试。目前,Python已经有成百上千的公共资源可以供你调用。

     

    Python作用

     

    Python可以用在许多场合。当你需要大量的动态调整,要容易使用,功能强大并且富有弹性的情况,Python可以发挥很好的功效。

     

    一个宏编程语言

    你可以用Python给现有的应用程序添加一个宏语言或底稿编制(scrīpting)能力。经过稍微的训练,它使用户级别的底稿编制变得简单。发展一种新的语言常常被认为是大公司独家专利。Python是一个你可以加入你现有工具的宏语言并适合不同的层次的人使用。

     

    一个快速的对象模型和算法的原型开发工具

    开发软件花费钱财需要很多时间才能达到很好的效果。在Python下创建对象,你可以比我们知道的任何语言用更短的代码和更少的时间,并且全部支持继承,密封和多形性。一个比较流行的办法是在Python中原型一个程序,直到你相信设计是正确的再换到C++中,一个更好的办法是将Python应用程序轮廓化,然后在C++中重写速度至关重要的部分。

     

    一个调试工具

    新程序和代码库需要测试。有经验的开发人员知道给一个新功能或程序建立一个测试套件会节约时间并减少麻烦。如果一个程序可以与输入输出文件工作,Python 可以生成输入,运行这个程序,然后检查输出并进行分析。如果问题在于数据,你可以编写一次性的脚本来检查数据是否一致。

     

    数据清除和转换

    你可能会将数据由一个数据库移到一个新的数据库,或新建一个界面让数据在互不兼容的系统中流动。如果人工来做,这会是一个很繁琐而且容易犯错误的过程,你总会遗漏东西,到头来你还得重做以前的工作。Python对列表和字典的本地支持使复杂的数据转换更加容易。而且这种交互式模式可以让编程人员在转换过程的每一阶段观看数据。还可以编写由源到目标的数据转换的脚本并按需要不断运行,直到它正确完成工作。

     

    Python作为粘合剂

    互不兼容的系统常常需要被联在一起,而且这个过程需要自动进行。Python支持所有的集成关键技术。同时也很好的与文件,协议,DLLs及COM对象工作。Python还提供广泛的库帮助你得到几乎任何种类的数据。它还是很好的控制其他套件、进行系统管理以及控制其他系统数据流动的工具。

     

    运行方式

     

    Python可以以命令行方式运行,也可以交互式方式运行,还具有图形集成环境,这样开发Python就相当方便。现在已经出现了许多用Python编写的可视化编程软件,用于实现象Delphi一样的功能。

     

    面向对象

     

    Python是一个真正的面向对象语言。它甚至支持异常的处理。如果学过Java,应该对这个不陌生。但其它的脚本语言,如PHP,好象就没有。这使得程序的编写更加清晰,而不需要许多的错误检查了。

     

    模块和包

     

    这一点更象是Java。对于Java的支持,大家可以了解JPython。JPython是用Java写的Python,它完全支持Java,在这个环境下使用Python可以随意地使用Java的类库。语言扩展可以用C、C++或Java为Python编写新的新言模块,如函数。或者与Python直接编译在一起,或者采用动态库装入方式实现。也专门有人编写了一个工具,可以实现为Python自动实现函数接口封装,这就是SWIG(Simplified Wrapper and Interface Generator),或称做简单封装和接口生成器(可以在http://sourceforge.net/projects/swig/)。

     

    有趣的语法

     

    Guido认为Python的语法是非常优美的。其中一点就是,块语句的表示不是C语言常用的{}对,或其它符号对,而是采用缩近表示法!有趣吧。就这一点来说,Guido的解释是:首先,使用缩近表示法减少了视觉上的混乱,并且使程序变短,这样就减少了需要对基本代码单元注意的范围;其次,它减少了程序员的自由度,更有利于统一风格,使得阅读别人的程序更容易。感觉还是不错的,就C语言来说,在if语句后面大括号的写法就好几种,不同的人喜欢不同的样子,还不如统一起来,都不会看得别扭。

    在每个类或函数的定义后面,第一行可以是说明语句,根本不需要注释符标记。对于后面跟块语句的语句,后面应跟上一个冒号。一行语句不能太长,因为没有行结束符,如果超长则要使用续行符(\)。还有一些有趣的比如说,象下面的一个比较处理,用C语言为:  

     

    if (2

    用Python可以表示为

    if (2

     

    什么是Zope?

     

    Zope是一个开放源代码的Web应用服务器,采用Python语言开发,使用它您可以方便的构建内容管理、内部网、门户网站、和其他的定制应用。

     

             高度面向对象的Web开发平台,采用Python语言开发。

             可以运行在几乎所有流行的操作系统上,支持多语言。

             能集成到其他流行的服务器,也自带服务器。

             提供清晰的数据/逻辑/表示的分离。

             带有可扩展的内置对象和强大的集成安全模块。

     

     什么是Plone?

     

    Pone是一个Zope上的一个用户友好、功能强大的开放源代码内容管理系统。Plone适合用作内部网/外部网的服务器、文档发布系统、门户服务器和异地协同群件工具,到目前,Plone其实已经发展成为了一个应用开发平台。

     

             是一种功能强大的开放源码(Open Source)内容管理系统(CMS)。

             通过Web浏览器来访问、编辑内容和管理,易于更新内容。

             无需编程,即可创建新的内容类型。

             协同的编辑和发布机制。

Open Toolbar