threading

python 多线程之threading

江枫思渺然 提交于 2020-03-02 19:02:16
一些常用函数: start():开始线程活动。 threading.Lock():创建锁 acquire():线程加锁 release():释放锁 threading.activeCount():返回当前”进程”里面”线程”的个数(包含主进程) threading.enumerate() :返回当前运行中的Thread对象列表 threading.setDaemon():参数设置为True的话会将线程声明为守护线程,必须在start() 方法之前设置,不设置为守护线程程序会被无限挂起。 join()方法来使得子进程运行结束后再执行父进程 个人比较喜欢创建线程类来实现多线程 来个简单的例子,开2个线程,打印时间,未加锁情况 # -*- coding: UTF-8 -*- import threading import time class MyThread(threading.Thread): def __init__(self, threadID, name, counter): super(MyThread, self).__init__() self.threadID, self.name, self.counter = threadID, name, counter def run(self): print "进程开始: " + self.name self.run_fun

Python 多线程Threading (一)

房东的猫 提交于 2020-03-02 19:01:52
不喜欢废话,先上今天的代码! #-*- coding:utf-8 -*- import threading class MyThreading(threading.Thread): def __init__(self,num): threading.Thread.__init__(self) self.num = num def run(self): print self.num t = MyThreading(100) t.start() print t.isAlive() 乍一看,很简单的threading代码。首先我们继承了Thread类,在子类里初始化后又重写了run方法。最后我们实例化MyThreading子类,然后打印我们的num参数。最后再打印线程执行状态。 初学者一看,绝对分为2派:1、支持说先打印num参数,然后才打印线程状态。 2、拍胸脯保证先打印线程状态再打印num参数; 其实结果出人预料: 结果1: C:\Python27\python.exe D:/ProjectSpace/thread-example.py 100True Process finished with exit code 0 结果2: C:\Python27\python.exe D:/ProjectSpace/thread-example.py True100 Process

python基本 -- threading多线程模块的使用

荒凉一梦 提交于 2020-02-29 12:58:30
python多线程编程,一般使用thread和threading模块。thread模块想对较底层,threading模块对thread模块进行了封装,更便于使用。所有,通常多线程编程使用threading模块。 (一)threading模块 Thread 线程类,这是我们用的最多的一个类,你可以指定线程函数执行或者继承自它都可以实现子线程功能; Timer与Thread类似,但要等待一段时间后才开始运行; Lock 锁原语,这个我们可以对全局变量互斥时使用; RLock 可重入锁,使单线程可以再次获得已经获得的锁; Condition 条件变量,能让一个线程停下来,等待其他线程满足某个“条件”; Event 通用的条件变量。多个线程可以等待某个事件发生,在事件发生后,所有的线程都被激活; Semaphore为等待锁的线程提供一个类似“等候室”的结构; BoundedSemaphore 与semaphore类似,但不允许超过初始值; Queue:实现了多生产者(Producer)、多消费者(Consumer)的队列,支持锁原语,能够在多个线程之间提供很好的同步支持。 (1)threading.Thread类 getName(self) 返回线程的名字 isAlive(self) 布尔标志,表示这个线程是否还在运行中 isDaemon(self) 返回线程的daemon标志 join

监控log文件,将得到的ip写入redis数据库

孤者浪人 提交于 2019-12-05 15:22:32
服务器端 将得到的 ip 写入数据库: #! /usr/bin/env python # encoding: utf-8 # time : 2015-06-02 9:55:24 # use : rpc # 在 192.168.8.214 建立服务器端,用函数 redis_records_add 在 redis 中处理 ip import sys import redis reload(sys) sys.setdefaultencoding('utf8') from SimpleXMLRPCServer import SimpleXMLRPCServer def redis_con(host): r = redis.Redis(host='%s' % host, port='6379') return r def redis_records_add(key, value): try: conn = redis_con('192.168.8.214') # 判断 key 是否在 redis 中已经有值,如果有那么自增 1 ,如果没有 那么设置为 1 if conn.zscore(key, value): redis_score = int(conn.zscore(key, value))+1 conn.zadd(key, value, redis_score) return conn

多线程检索 mysql 分表模式,发挥分表方案的最大性能

隐身守侯 提交于 2019-12-01 18:17:25
我天真的认为,mysql 的 merge 引擎分表模式下,mysql 会自动启用多线程对旗下的子表进行并发检索,但到目前为止我是没找到 mysql 的此机制设置,简单测试下就会发现....mysql 依然是依次检索各个子表,花费的时间与未分表情况下无异 mysql 在单表数据量达到千万级别时,最好采用划分成若干个小单位的优化方案,分区或者分表,这里我们讲分表。 场景 主单表:data 400000w 子分表:data_1 100000w,data_2 100000w,data_3 100000w,data_4 100000w module/mysql.py是我自己封装的mysql DAO mysql_task.py是我们这次的测试本,里面启用了四个子线程去检索四个分表,主线程自己去检索主单表 module/mysql.py #! /usr/bin/env python # -*-coding:utf-8-*- """ mysql DAO 简单的写一下 大家就别在意代码有些依赖注入的问题了 """ import MySQLdb class Mysql(): def __init__(self, host, user, passwd, db, port = 3306): self.host = host self.user = user self.passwd = passwd