标签:
import threadingdef func1(arg):print(arg)# t = threading.Thread( target=线程要执行的函数, args=函数参数-数组, kwargs=函数参数-字典)t = threading.Thread(target=f1, args=(123,) )t.start()# 准备就绪,准备让cpu进行调度,# 只要cpu一旦调度了该线程,就会执行threading 模块中的run方法,run方法只做一件事,执行target指向的函数# 即,target实际上是run在方法内部执行的
class MyThread(threading.Thread):def __init__(self, func, args):self.func = funcself.args = argssuper(MyThread, self).__init__()def run(self):self.func(self.args)def f2():passobj = MyThread(f2, 123)obj.start()
import threadingimport time
NUM = 0def function1():global NUMNUM += 1time.sleep(0.1) # 需要让所有线程都夯在这里,然后同时输出print(NUM)
for x in range(10):t = threading.Thread(target=function1, )t.start()
import threadingimport time
NUM = 0lock = threading.RLock()
def function1():lock.acquire()global NUMNUM += 1time.sleep(2)print(NUM)lock.release()
for x in range(10):t = threading.Thread(target=function1,)t.start()
def func(l):global NUMl.acquire()NUM -= 1l.acquire()time.sleep(2)l.release()print(NUM)l.release()
import threadingimport time
NUM = 0semaphore = threading.BoundedSemaphore(5) # 表示每批放进来5个线程
def function1(i, se):se.acquire()global NUMNUM += 1time.sleep(2)print(‘我是线程:{}, NUM此时为:{}‘.format(i, NUM))se.release()
for x in range(10):t = threading.Thread(target=function1, args=(x, semaphore))t.start()
import threadingevent = threading.Event()
def function(id, en):print(‘兵{}:大王,怎么办?‘.format(id))en.wait()print(‘兵{}:杀呀~~~‘.format(id))
for x in range(10):t = threading.Thread(target=function, args=(x, event))t.start()
event.clear()print(‘1、杀出一条血路 2、投降‘)you_choice = input(‘>>‘).strip()if you_choice == ‘1‘:event.set()
import threadingcondition = threading.Condition()
def function(id, con):con.acquire()con.wait() # 子线程全部卡在这里,等待通知print(‘兵{}:杀呀~~~‘.format(id))con.release()
for x in range(100):t = threading.Thread(target=function, args=(x, condition))t.start()
print(‘你要挑战几个?‘)you_choice = input(‘>>‘).strip()condition.acquire()condition.notify(int(you_choice)) # 传进去几个,上面运行几个线程condition.release()
import threadingdef condition_func(): # 该函数返回值必须为布尔值ret = Falseinp = input(‘>>‘).strip()if inp == ‘1‘:ret = Truereturn ret
def function(id, con):con.acquire()con.wait_for(condition_func) # 一旦该函数体返回值为True,则放出一个线程print(‘thread{}:im gone~~~‘.format(id))con.release()
condition = threading.Condition()for x in range(5):t = threading.Thread(target=function, args=(x, condition))t.start()
from threading import Timerimport timedef function():print(‘开火~‘)t = Timer(3, function) # 子线程,三秒后执行该函数t.start()for i in range(1, 4):print(‘time:{}‘.format(i)) # 主线程,数数,每次间隔1秒time.sleep(1)
import timeimport queueimport threading
class MyPool:def __init__(self, maxsize=5):self.maxsize = maxsizeself._q = queue.Queue(self.maxsize) # 创建一个指定大小的队列for _ in range(self.maxsize):self._q.put(threading.Thread) # 在队列中全为线程"类"
def get_thread(self):return self._q.get() # 取出一个线程"类"
def add_thread(self):self._q.put(threading.Thread) # 添加一个线程“类”
# 定义任务,参数为线程池(执行该任务的线程来源),执行完毕后向该池中归还(添加)一个线程def task(n, p):print(‘{}: 执行任务,完毕‘.format(n))time.sleep(2)p.add_thread()
# 创建一个大小为5的线程池pool = MyPool(5)
for i in range(100):t_class = pool.get_thread() # 从队列中获取一个线程"类名称"t_obj = t_class(target=task, args=(i, pool)) # 用取出来的类,实例化个线程,并交给线程任务去执行,每次从队列中取一个线程,若没有线程则等待t_obj.start()
标签:
原文地址:http://www.cnblogs.com/qiaogy/p/5875448.html