python 多线程 笔记(一)】的更多相关文章

尽管在Python中可以使用各种锁和同步原语的组合编写非常传统的多线程程序,但有一种首推的编程方式要优于其他所有编程方式即将多线程程序组织为多个独立人物的集合,这些任务之间通过消息队列进行通信 queue模块(在python2中叫Queue)实现了各种多生产者-多消费者队列,可用于在执行的多个线程之间安全地交换信息. queue模块定义了三种不同的队列类 Queue([maxsize]) 创造一个FIFO(first-in-first-out,先进先出)队列.maxsize是队列中可以放入的项的…
Python中使用threading模块来实现多线程 threading提供一些常用的方法 threading.currentThread() 返回当前的线程变量 threading.enumerate() 返回一个正在运行的线程的list threading.activeCount() 返回正在运行的线程数量,与len(threading.enumerate()) 有相同的结果. threading.TIMEOUT_MAX 设置threading全局超时时间. threading模块提供Thr…
我们已经知道,对公共资源进行互斥访问,可以使用Lock上锁,或者使用RLock去重入锁. 但是这些都只是方便于处理简单的同步现象,我们甚至还不能很合理的去解决使用Lock锁带来的死锁问题. 要解决更复杂的同步问题,就必须考虑别的办法了. threading提供的Condition对象提供了对复杂线程同步问题的支持. Condition被称为条件变量,除了提供与Lock类似的acquire和release方法外,还提供了wait和notify方法. 使用Condition的主要方式为: 线程首先a…
#coding=utf-8 import threading from time import sleep, ctime loops = [4,2] def loop(nloop, nsec): print 'start loop', nloop, 'at:', ctime() sleep(nsec) print 'loop', nloop, 'done at:', ctime() def main(): print 'starting at:', ctime() threads = [] nl…
在类里弄一个闭包出来 很多资料上说,类内部的变量有两种. 按定义所在的位置,分__init__上方的和__init__下方的 按内存所在的位置,分类的和实例的,或者说公共的和私有的 现在,我想在类里定义一个保存实例个数的变量 x,如下: >>> class Foo: . . . x = 0 . . . def __init__(self): . . . self.x += 1 . . . print(self.x) >>> f1 = Foo() 1 >>&g…
用 threading.Event() 也可以实现生产者/消费者模式 (自己拍脑袋想出来的,无法知道其正确性,请大神告知为谢!) import threading import time import random products = 20 class Producer(threading.Thread): '''生产者''' ix = [0] # 生产者实例个数 # 闭包,必须是数组,不能直接 ix = 0 def __init__(self): super().__init__() sel…
import threading import time import random class Worker(threading.Thread): '''售票员''' def __init__(self, wait_num=5, index=0): super().__init__() self.wait_num = wait_num # 当前排队人数 self.setName('窗口' + str(index)) # 窗口号 def run(self): global counter, mu…
线程的私有命名空间实现: threading_namespace = threading.local() import threading import time import random threading_namespace = threading.local() # 命名空间 def print_country(): thread_name = threading.current_thread().getName() country = threading_namespace.count…
锁是什么?什么场合使用锁? 锁是一种机制,用于保护那些会引起冲突的资源. 比如上厕所,进去之后第一件事干嘛?把厕所门反锁!表示什么呢?表示这个厕所正在使用中! 至于在厕所里面干大事.干小事.还是打飞机,都可以! 完事之后干嘛?把厕所门打开!表示什么呢?那谁,你可以进来打飞机了. 一.全局锁.函数内部上锁/解锁.函数打包进线程 import threading import time def my_func(num): global counter, mutex # 获得线程名 threadnam…
本文对不使用线程和使用线程做了一个对比. 假设有两件事情:听歌.看电影 一.不用线程 import time songs = ['爱情买卖','朋友','回家过年','好日子'] movies = ['阿凡达','猩球崛起'] def music(songs): for s in songs: print("开始听歌曲:%s \t-- %s" %(s, time.ctime())) time.sleep(3) def movie(movies): for m in movies: pr…