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:阻塞时间

时间: 2024-10-01 09:43:52

python MySQLdb、socket与进线程的相关文章

python中的进程、线程(threading、multiprocessing、Queue、subprocess)

Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就比别人NB. 我们先了解一下什么是进程和线程. 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. 程序是运行在系统上的具有某种功能的软件,比如说浏览器,音乐播放器等. 每次执行程序的时候,都会完成一定的功能,比如说浏览器帮我们打开网页,为了保证其独立性,就需要一个专

python MySQLdb连接mysql失败

Traceback (most recent call last):   File "./test_db.py", line 12, in < module>     db='mysite')   File "build/bdist.linux-x86_64/egg/MySQLdb/__init__.py", line 81, in Connect   File "build/bdist.linux-x86_64/egg/MySQLdb/con

Java 和 Python 的 Socket 通信

网络上两个程序通过一个双向通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket支持的协议有多种,这里主要介绍基于 TCP/IP 协议族的 Socket 编程. 首先,IP协议族决定了socket的地址类型,在通信中必须采用对应的地址.AF_INET(AF 表示 Adress Family)表示要用 ipv4 地址(32位)与端口号(16位)的组合. 然后,根据传输协议又分为:流式 Socket(SOCK_STREAM) 和数据报式 Socket(SOCK_DGRAM):

python MySQLdb连接mysql失败(转载)

最近了解了一下django,数据库选用了mysql, 在连接数据库的过程中,遇到一点小问题,在这里记录一下,希望能够对遇到同样的问题的朋友有所帮助,少走一些弯路.关于django,想在这里也额外说一句.django是很优秀的基于python的web开发框架,对于有python基础的后台程序员,如果有要做一些前台的需求,强烈推荐django.下面言归正传. 1. 问题的现象 下面是连接数据库的代码,用的是python的MySQLdb模块: 1 2 3 4 5 db = MySQLdb.connec

Python 的 Socket 编程教程

这是用来快速学习 Python Socket 套接字编程的指南和教程.Python 的 Socket 编程跟 C 语言很像. Python 官方关于 Socket 的函数请看 http://docs.python.org/library/socket.html 基本上,Socket 是任何一种计算机网络通讯中最基础的内容.例如当你在浏览器地址栏中输入 www.oschina.net 时,你会打开一个套接字,然后连接到 www.oschina.net 并读取响应的页面然后然后显示出来.而其他一些聊

转载--Python之路,进程、线程、协程篇(原文地址:http://www.cnblogs.com/alex3714/articles/5230609.html)

本节内容 进程.与线程区别 cpu运行原理 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Queue队列 开发一个线程池 进程 语法 进程间通讯 进程池 进程与线程 什么是线程(thread)? 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务 A

Python的socket网络编程)(一)

(注:本文部分内容摘自互联网,由于作者水平有限,不足之处,还望留言指正.) 先写首诗,抒抒情. 一. 食堂.校园 见过你那么多次 卑微的我 只敢偷偷瞄上一眼 心扑通 扑通 春天真好 不是么 二. 学子.银桦 期待再一次见你 害羞的我 却敢四处张望 眼睛 一眨一眨 你在哪里 可否知道 三. 阴郁的早晨 一片混沌 相见 是为了什么 怀念 是自我麻痹 银杏路上 别来无恙 四. 天空 有你的影子 似一缕青烟 随风 慢慢 慢慢 慢慢 在我心中散去 (摘自河畔---最近在水河畔) 写的真好,不是吗?看到这首

python MySQLdb在windows环境下的快速安装、问题解决方式

使用Python访问MySQL,需要一系列安装 Linux下MySQLdb安装见 Python MySQLdb在Linux下的快速安装 http://blog.csdn.net/wklken/article/details/7271019 ------------------------------------------------------------- 以下是windows环境下的: 1.      安装数据库mysql 下载地址:http://www.mysql.com/downloa

Python MySQLdb

数据库连接 创建数据库表 数据库插入操作 数据库查询操作 数据库更新操作 数据库连接 连接数据库前,请先确认以下事项: 您已经创建了数据库 TESTDB. 在TESTDB数据库中您已经创建了表 EMPLOYEE EMPLOYEE表字段为 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME. 连接数据库TESTDB使用的用户名为 "testuser" ,密码为 "test123",你可以可以自己设定或者直接使用root用户名及其密码,My