python学习笔记(15-18)

十五、规则表达式

----------------------------------------------------------------------------------------------

十六、网络编程

AF_UNIX 基于UNIX文件
  AF_INET 基于网络

TCP:SOCK_STREAM
  UDP:SOCK_DGRAM

常见命令socket,bind,listen,accept,connect,recv,send,recvfrom,sendto,close

2个简单的代码

‘‘‘tcpserver.py‘‘‘
  from socket import * #为了获得宏定义
  from time import time,ctime

HOST=‘‘
  PORT=21567
  BUFSIZE=1024
  ADDR=(HOST,PORT)

tcpss=socket(AF_INET,SOCK_STREAM)
  tcpss.bind(ADDR)
  tcpss.listen(4) #最大允许连接数
  sexit=0

while 1:
   print ‘wait‘
   tcpcs,addr=tcpss.accept()
   print ‘from‘ ,addr

   while 1:
     data=tcpcs.recv(BUFSIZE)
     print data 
     if not data:
      break
     tcpcs.send(‘[%s] %s‘%(ctime(time()),data))
     if data == ‘exit‘:
      sexit=1  
   tcpcs.close()
   if sexit:
     break
  
  tcpss.close

‘‘‘tcpclient.py‘‘‘

from socket import *

HOST=‘192.168.1.xxx‘
  PORT=21567 #服务器端的端口
  BUFSIZE=1024
  ADDR=(HOST,PORT)

tcpcs=socket(AF_INET,SOCK_STREAM)
  tcpcs.connect(ADDR)

data=raw_input(‘>‘)
  tcpcs.send(data)
  data=tcpcs.recv(BUFSIZE)
  print data
  tcpcs.close()

相关函数:

sendall,getpeername,getsockname,getsockopt,makefile,settimeout,gettimeout,setblocking
  fromfd,gethostname,gethostbyname,gethostbyaddr,getservbyname,getprotobyname,ntohl,ntohs,htonl,htons,inet_aton,inet_ntoa,ssl

----------------------------------------------------------------------------------------------

十七、多线程

建立线程的方法有2种,一是使用模块给于自定义函数,二是继承线程类。

退出线程的方法:执行完成,thread.exit(),sys.exit()获得引发一个SystemError异常。

主进程退出,线程可能会直接死亡不做任何扫尾工作,也可能继续生存,看操作系统而定。
  如果使用thread,当主进程运行结束,则子进程不扫尾退出,除非进行加锁。
  如果使用继承线程类和threading模块使用函数的方法启动线程,则自动添加锁,线程运行结束,主进程才会退出。

thread模块提供对线程和线程锁的基本支持,不推荐使用。
  threading提供全功能线程管理功能。
  Queue允许用户创建被多个线程共享的队列数据结构。

thread模块建立线程的例子:
  def loop(a1,a2):pass
  thread.start_new_thread(loop,(1,2))

threading可以使用函数也可以使用类,如使用函数的:
  def loop(a1,a2):pass
  t=threading.Thread(target=loop,args=(1,[1,2]))
  t.start()
  t.join() #等待线程的结束,主线程进入阻塞状态,就算没有join,在子线程完成前,主进程执行完了全部代码也不会退出。就算用sys.exit()也不会导致子线程退出,只是sys.exit()的代码将不会执行。

如:t.start();print ‘end1‘;sys.exit();print ‘end2‘;
  子线程继续运行,只是end2没有打印出来。

可以创建类(不是子类)来实现通过调用一个函数启动一个线程。我觉得不如直接使用子类来做。

可以继承threading.Thread子类来实现一个进程,如:
  class myt(threading.Thread):
   def __init__(self):
     threading.Thread.__init__(self)
   def __run__(self):
     pass
  t=myt()
  t.start()

setDaemon(True)可以在init中设置,必须在start之前用,否则就会抛出异常。如果不设置默认为False。不明白有什么用处,难道是确认初始化里面某些操作是不是成功?
  isAlive只有在start以后才会为真,当然线程退出后为假。

另外,python不支持杀死线程,这点感觉很麻烦。

  Queue模块的方法Queue(size),qsize(),empty(),full(),put(item,block=0),get(block=0)注意实测缺省值不为0
书上写,block非0才会在队伍满的时候阻塞,这里发现为0时同样会阻塞。
  继续发现,似乎这里的缺省值并不是0,使用q1.put(‘a‘,0)把block=0写入时,就会提示队列已经满了,出现一个叫‘Queue.Full‘的异常。

----------------------------------------------------------------------------------------------

十八、GUI图形界面

时间: 2024-09-30 14:51:22

python学习笔记(15-18)的相关文章

Python学习笔记15:标准库之获取进程信息(os包)

Python的os包中有查询和修改进程信息的函数. 进程信息 os包中相关函数如下: uname() 返回操作系统相关信息,类似于Linux上的uname命令. umask() 设置该进程创建文件时的权限mask,类似于Linux上的umask命令. get*() 查询 (*由以下代替) uid, euid, resuid, gid, egid, resgid :权限相关,其中resuid主要用来返回saved UID. pid, pgid, ppid, sid                

Python学习笔记15(socketservre)

利用socket模块创建socket通信服务,但发现利用socket模块创建的服务无法进行多线程的处理,当需要进行大量请求处理时,请求就会阻塞在队列中,甚至发生请求丢弃.并且如果我们需要大量的socket时,就需要重复创建许多socket.绑定端口..... ,对于程序员来说意味着重复书写大量无意义代码. 那有没有一种方式既能简化书写流程又能实现多线程开发呢 ? 答案是肯定的,这就是SocketServer模块. SocketServer简化了网络服务器的编写.在进行socket创建时,使用So

python基础教程_学习笔记15:标准库:一些最爱——fileinput

标准库:一些最爱 fileinput 重要的函数 函数 描述 input([files[,inplace[,backup]]) 便于遍历多个输入流中的行 filename() 返回当前文件的名称 lineno() 返回当前(累计)的名称 filelineno() 返回当前文件的行数 isfirstline() 检查当前行是否是文件的第一行 isstdin() 检查最后一行是否来自sys.stdin nextfile() 关闭当前文件,移动到下一个文件 close() 关闭序列 fileinput

OpenCV之Python学习笔记

OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书<OpenCV Computer Vision with Python>,于是就看一遍,顺便把自己掌握的东西整合一下,写成学习笔记了.更需要的朋友参考. 阅读须知: 本文不是纯粹的译文,只是比较贴近原文的笔记:         请设法购买到出版社出版的书,支持正版. 从书名就能看出来本书是介绍在Pytho

python学习笔记2—python文件类型、变量、数值、字符串、元组、列表、字典

python学习笔记2--python文件类型.变量.数值.字符串.元组.列表.字典 一.Python文件类型 1.源代码 python源代码文件以.py为扩展名,由pyton程序解释,不需要编译 [[email protected] day01]# vim 1.py #!/usr/bin/python        print 'hello world!' [[email protected] day01]# python 1.py hello world! 2.字节代码 Python源码文件

python学习笔记[3]-邮件的发送

本文摘抄自:http://www.cnblogs.com/xiaowuyi/archive/2012/03/17/2404015.html 一.相关模块介绍 发送邮件主要用到了smtplib和email两个模块,这里首先就两个模块进行一下简单的介绍:    1.smtplib模块 smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])   SMTP类构造函数,表示与SMTP服务器之间的连接,通过这个连接可以向smtp服务器发送指令,执行

python学习笔记11-python内置函数

python学习笔记11-python内置函数 一.查看python的函数介绍: https://docs.python.org/2/library/ 二.python内置函数 1.abs获取绝对值: 通过python官网查看abs abs(x) Return the absolute value of a number. The argument may be a plain or long integer or a floating point number. If the argument

python 学习笔记 12 -- 写一个脚本获取城市天气信息

最近在玩树莓派,前面写过一篇在树莓派上使用1602液晶显示屏,那么能够显示后最重要的就是显示什么的问题了.最容易想到的就是显示时间啊,CPU利用率啊,IP地址之类的.那么我觉得呢,如果能够显示当前时间.温度也是甚好的,作为一个桌面小时钟还是很精致的. 1. 目前有哪些工具 目前比较好用的应该是 weather-util, 之前我获取天气信息一般都是通过它. 使用起来也很简单: (1) Debian/Ubuntu 用户使用 sudo apt-get install weather-util 安装

Tornado/Python 学习笔记(二)

部分ssrpc.py代码分析 -- 服务端: 1 #!/usr/bin/python3 2 3 from xmlrpc.client import Fault, dumps, loads 4 import sys 5 from socketserver import ForkingMixIn 6 from xmlrpc.server import SimpleXMLRPCServer 7 8 class VerboseFaultXMLRPCServer(SimpleXMLRPCServer):

Tornado/Python 学习笔记(一)

1.源代码下载及安装:http://www.tornadoweb.org/en/stable/ 2.python中xmlrpc库官方文档:https://docs.python.org/3/library/xmlrpc.html?highlight=xmlrpc 3.xml介绍与学习:http://www.w3school.com.cn/xml/xml_intro.asp XML 被设计为传输和存储数据,其焦点是数据的内容. HTML 被设计用来显示数据,其焦点是数据的外观. HTML 旨在显示