python相似模块用例


Posted in Python onMarch 04, 2016

一:threading VS Thread

众所周知,python是支持多线程的,而且是native的线程,其中threading是对Thread模块做了包装,可以更加方面的被使用,threading模块里面主要对一些线程操作对象化了,创建了Thread的类。

使用线程有两种模式,一种是创建线程要执行的函数,把这个函数传递进Thread对象里,让它来执行,一种是直接从Thread继承,创建一个新的class,把线程执行的代码放到这个新的类里面,用例如下:

①使用Thread来实现多线程

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import string
import threading 
import time

def threadMain(a):
  global count,mutex
  #获得线程名
  threadname = threading.currentThread().getName()

  for x in xrange(0,int(a)):
    #获得锁
    mutex.acquire()
    count += 1
    #释放锁
    mutex.release()
    print threadname,x,count
    time.sleep()

def main(num):
  global count,mutex
  threads = []
  count = 1
  #创建一个锁
  mutex = threading.Lock()
  #先创建线程对象
  for x in xrange(0,num):
    threads.append(threading.Thread(target = threadMain,args=(10,)))
  for t in threads:
    t.start()
  for t in threads:
    t.join()

if __name__ == "__main__":
  num = 4
  main(num);

②使用threading来实现多线程

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import threading
import time

class Test(threading.Thread):
  def __init__(self,num):
    threading.Thread.__init__(self):
    self._run_num = num

  def run(self):
    global count,mutex
    threadName = threading.currentThread.getName()
    for x in xrange(0,int(self._run_num)):
      mutex.acquire()
      count += 1
      mutex.release()
      print threadName,x,count
      time.sleep(1)

if __name__ == "__main__":
  global count,mutex
  threads = []
  num = 4
  count = 1
  mutex.threading.Lock()
  for x in xrange(o,num):
    threads.append(Test(10))
  #启动线程
  for t in threads:
    t.start()
  #等待子线程结束
  for t in threads:
    t.join()

二:optparser VS getopt

①使用getopt模块处理Unix模式的命令行选项

getopt模块用于抽出命令行选项和参数,也就是sys.argv,命令行选项使得程序的参数更加灵活,支持短选项模式和长选项模式

例:python scriptname.py ?f “hello” ?directory-prefix=”/home” ?t  --format ‘a'‘b'

getopt函数的格式:getopt.getopt([命令行参数列表],‘短选项',[长选项列表])

其中短选项名后面的带冒号(:)表示该选项必须有附加的参数

长选项名后面有等号(=)表示该选项必须有附加的参数

返回options以及args

options是一个参数选项及其value的元组((‘-f','hello'),(‘-t',''),(‘—format',''),(‘—directory-prefix','/home'))

args是除去有用参数外其他的命令行 输入(‘a',‘b')

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import sys
import getopt

def Usage():
  print "Usage: %s [-a|-0|-c] [--help|--output] args..."%sys.argv[0]

if __name__ == "__main__":
  try:
    options,args = getopt.getopt(sys.argv[1:],"ao:c",['help',"putput="]):
    print options
    print "\n"
    print args

    for option,arg in options:
      if option in ("-h","--help"):
        Usage()
        sys.exit(1)
      elif option in ('-t','--test'):
        print "for test option"
      else:
        print option,arg
  except getopt.GetoptError:
    print "Getopt Error"
    Usage()
    sys.exit(1)

②optparser模块

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import optparser
def main():
  usage = "Usage: %prog [option] arg1,arg2..."
  parser = OptionParser(usage=usage)
  parser.add_option("-v","--verbose",action="store_true",dest="verbose",default=True,help="make lots of noise [default]")
  parser.add_option("-q","--quiet",action="store_false",dest="verbose",help="be vewwy quiet (I'm hunting wabbits)")
  parser.add_option("-f","--filename",metavar="FILE",help="write output to FILE")
  parser.add_option("-m","--mode",default="intermediate",help="interaction mode: novice, intermediate,or expert [default: %default]")
  (options,args) = parser.parse_args()
  if len(args) != 1:
    parser.error("incorrect number of arguments")
  if options.verbose:
    print "reading %s..." %options.filename 

if __name__ == "__main__":
  main()

以上就是threading VS Thread、optparser VS getopt 的相互比较,希望对大家学习模块有所帮助。

Python 相关文章推荐
在Python中调用ggplot的三种方法
Apr 08 Python
Python实现二分查找算法实例
May 26 Python
python+tkinter编写电脑桌面放大镜程序实例代码
Jan 16 Python
Python实现合并excel表格的方法分析
Apr 13 Python
Python实现平行坐标图的两种方法小结
Jul 04 Python
Python-copy()与deepcopy()区别详解
Jul 12 Python
Python 3.8正式发布,来尝鲜这些新特性吧
Oct 15 Python
解决python DataFrame 打印结果不换行问题
Apr 09 Python
如何基于python实现不邻接植花
May 01 Python
python中rb含义理解
Jun 18 Python
python报错: 'list' object has no attribute 'shape'的解决
Jul 15 Python
给numpy.array增加维度的超简单方法
Jun 02 Python
Python程序中用csv模块来操作csv文件的基本使用教程
Mar 03 #Python
举例简单讲解Python中的数据存储模块shelve的用法
Mar 03 #Python
Python中的数据对象持久化存储模块pickle的使用示例
Mar 03 #Python
Python和Perl绘制中国北京跑步地图的方法
Mar 03 #Python
python套接字流重定向实例汇总
Mar 03 #Python
Python设计模式中单例模式的实现及在Tornado中的应用
Mar 02 #Python
Python使用设计模式中的责任链模式与迭代器模式的示例
Mar 02 #Python
You might like
环境会对咖啡种植有什么影响
2021/03/03 咖啡文化
php 自写函数代码 获取关键字 去超链接
2010/02/08 PHP
mayfish 数据入库验证代码
2010/04/30 PHP
PHP ? EasyUI DataGrid 资料取的方式介绍
2012/11/07 PHP
定义php常量的详解
2013/06/09 PHP
crontab无法执行php的解决方法
2016/01/25 PHP
php+MySql实现登录系统与输出浏览者信息功能
2016/07/01 PHP
Yii2第三方类库插件Imagine的安装和使用
2017/07/06 PHP
laravel按天、按小时,查询数据的实例
2019/10/09 PHP
在修改准备发的批量美化select+可修改select时,在非IE下发现了几个问题
2007/01/09 Javascript
Jquery知识点二 jquery下对数组的操作
2011/01/15 Javascript
调用jQuery滑出效果时闪烁的解决方法
2014/03/27 Javascript
JS实现页面超时后自动跳转到登陆页面
2015/01/19 Javascript
jQuery中on()方法用法实例
2015/01/19 Javascript
Javascript使用uploadify来实现多文件上传
2016/11/16 Javascript
详谈js模块化规范
2017/07/07 Javascript
JS设计模式之策略模式概念与用法分析
2018/02/05 Javascript
Vue插值、表达式、分隔符、指令知识小结
2018/10/12 Javascript
Python函数嵌套实例
2014/09/23 Python
Python selenium 父子、兄弟、相邻节点定位方式详解
2016/09/15 Python
Python实现网站注册验证码生成类
2017/06/08 Python
Python递归实现汉诺塔算法示例
2018/03/19 Python
安装Anaconda3及使用Jupyter的方法
2020/10/27 Python
canvas学习和滤镜实现代码
2018/08/22 HTML / CSS
TripAdvisor斯洛伐克:阅读评论、比较价格和酒店预订
2018/04/25 全球购物
Fossil德国官网:化石手表、手袋、珠宝及配件
2019/12/07 全球购物
python re模块和正则表达式
2021/03/24 Python
金融专业推荐信
2013/11/14 职场文书
毕业生自荐信
2013/12/14 职场文书
班主任工作年限证明
2014/01/12 职场文书
教师通用专业自荐书范文
2014/02/11 职场文书
乡镇党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
建筑质检员岗位职责
2015/04/08 职场文书
生产车间主任岗位职责
2015/04/08 职场文书
幼儿园圣诞节活动总结
2015/05/06 职场文书
电影圆明园观后感
2015/06/03 职场文书