zoukankan      html  css  js  c++  java
  • python MySQLdb、socket与进线程

    1 centos下 安装MySQLdb模块

     a 首先需要先安装 setuptool 
     b yum install -y mysql_devel 头文件
     c yum install -y python_devel 头文件
    
     cd MySQLdb
     python setup.py build
     python setup.py install
    

    1.1、数据库连接

    MySQLdb提供了connect方法用来和数据库建立连接,接收数个参数,返回连接对象:

    conn=MySQLdb.connect(host="localhost",user="root",passwd="jb51",db="test",charset="utf8") #建议使用键值字典形式,这样不用害怕顺序问题

    比较常用的参数包括:
    host:数据库主机名.默认是用本地主机
    user:数据库登陆名.默认是当前用户
    passwd:数据库登陆的秘密.默认为空
    db:要使用的数据库名.没有默认值
    port:MySQL服务使用的TCP端口.默认是3306
    charset:数据库编码

    commit() 提交
    rollback() 回滚

    close() 关闭连接

    cursor()返回游标,自动开启一个事务后者使用 autoCommit(false)关闭自动提交

    1.2、cursor方法执行与返回值

    //执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
    execute(self, query, args)

    //接收全部的返回结果行.
    fetchall(self)


    //接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据
    fetchmany(self, size=None)


    //返回一条结果行
    fetchone(self)


    //这是一个只读属性,并返回执行execute()方法后影响的行数
    rowcount

    2 socket

     a 创建 sk = socket.socket();

     #sk.setblocking(0) 非阻塞,accept和recv时一旦无数据,则报错

     b 绑定 sk.bind(('localhost,8080')) 在AF_INET下,以元组(host,port)的形式表示地址

     c 监听队列 sk.listen(back) 开始监听传入连接。backlog指定在拒绝连接之前,可以挂起的最大连接数量

     d connect,address = sk.accept()  接收TCP 客户的连接(阻塞式)等待连接的到来,返回连接对象及地址

     e 连接 sk.connect(address)

     f 接收数据 sk.recv(bufsize) 接收数据大小 

     g 发送数据 sk.send(string)

     h 关闭 sk.close()

    server:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    import socket
    
    ip_port = ('127.0.0.1',8080)
    
    sk = socket.socket()
    sk.bind(ip_port)
    sk.listen(5)
    flas = true
    while flag:
        conn,addr = sk.accept()
    
        client_data = conn.recv(1024)
        print client_data
        conn.sendall('test')
    
        conn.close()

     client:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import socket
    ip_port = ('127.0.0.1',8080)
    
    sk = socket.socket()
    sk.connect(ip_port)
    
    sk.sendall('来了')
    
    server_reply = sk.recv(1024)
    print server_reply
    
    sk.close()

    3 线程(threading)

    start            线程准备就绪,等待CPU调度

    setName      为线程设置名称

    getName      获取线程名称

    setDaemon   设置为后台线程或前台线程(默认)
                       如果是后台线程,主线程执行过程中,后台线程也在进行,主线程执行完毕后,后台线程不论成功与否,均停止
                        如果是前台线程,主线程执行过程中,前台线程也在进行,主线程执行完毕后,等待前台线程也执行完成后,程序停止

    join              逐个执行每个线程,执行完毕后继续往下执行,该方法使得多线程变得无意义

    run              线程被cpu调度后自动执行线程对象的run方法

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import threading
      
    def show(arg):
        print 'thread'+str(arg)
      
    for i in range(3):
        t = threading.Thread(target=show, args=(i,)) #也可以使用继承方式使用多线程,重写run方法
        t.start()
      
    print 'main thread stop'

    3.1 线程锁

      a lock = threading.Lock()

         lock = threading.RLock()可多次获取锁,释放的时候也需要几次

      b lock.acquire() 获取锁

      c lock.release()释放锁

    3.2 线程事件(事件处理的机制:全局定义了一个“Flag”,如果“Flag”值为 False,那么当程序执行 event.wait 方法时就会阻塞,如果“Flag”值为True,那么event.wait 方法时便不再阻塞)

     a e = threading.Event()

     b e.wait() 阻塞

     c e.set() 设置flag=true

     d e.clear() 清除set()的值,也就是重置flag

    3.3 队列

     a queue = Queue(maxsize) 队列最大值

     b queue.empty()是否为空

     c queue.qsize()队列大小

     d queue.full() 队列是否达到最大值

     e queue.put()/get()/clear() 添加/获取/清空

    4 进程(进程各自持有一份数据,默认无法共享数据)

     multiprocessing import Process 

    4.1使用方式与线程类似,由于进程数据独立,可使用multiprocessing.Array/Queue/Value/Manager进行数据共同管理,当然也可使用reids

    4.2 锁机制与线程类似

    4.3 进程池(multiprocessing.Pool)

     p = Pool(n) 进程数量

     res = p.apply_async(func,args,callback)/apply() 异步/同步执行

     res.get(time) 获取进程返回数据,time:阻塞时间

  • 相关阅读:
    C#面向过程之类型转换、算术运算符、关系运算符、逻辑运算符、if-else语句、switch-case、循环结构(while、for)、三元表达式
    C#面向过程之编译原理、变量、运算符
    VS快捷键整理
    简单聊聊mybatis插件(附源码)
    高性能页面加载技术(流水线加载)BigPipe的C#简单实现(附源码)
    聊聊js运算符 ‘与(&&)’和‘ 或(||)’
    从内部剖析C# 集合之--Dictionary
    从内部剖析C# 集合之---- HashTable
    字符串查找和函数操作题目解析
    常用排序算法实现
  • 原文地址:https://www.cnblogs.com/waited/p/5325918.html
Copyright © 2011-2022 走看看