当前位置: 代码迷 >> 综合 >> Python threading event
  详细解决方案

Python threading event

热度:54   发布时间:2023-11-05 20:42:10.0

进程与线程

进程:程序的一次执行,程序装载内存,系统分配资源数据栈等;

线程:每个进程都有入口,出口,有优先级,资源争抢

GIL全局解释器锁

GLobal Interpreter Lock,GIL并不是Python的特性,是实现CPython时引入的一个概念

GIL是一把全局排它锁,同一时间只有一个线程在运行,这造成了Python几乎等于是单线程执行的程序

mutiprocessing库是为了弥补thread库因为GIL而低效的的缺陷,每一个进程都有自己独立的GIL,每一个都是一个进程而不是线程

from multiprocessing import Process
import time
def f(n):time.sleep(1)print n*n
if __name__=='__main__':for i in range(10):p=Process(target=f,args=[i,])p.start()

做并发的时候效率比较高

threading模块使用

import time
import threading
def f1():pass 
def f2(arg1,arg2):time.sleep(1)print('正在执行.....')print(arg1+arg2)f1()
thr=threading.Thread(target=f2,args=(111,222))
thr.start()thr.setDaemon(True)
thr.join(2)

其中,setDaemon(True)方法里的参数设置成True则是主线程不用等待子线程,主线程结束之后就将子线程结束掉,也称为守护线程,而join(5)是等待线程,主线程等待子线程,子线程结束之后主线程才能执行,等待的最大的时间就是给定的参数。

threading.currentThread()返回当前的线程变量

threading.enumerate()返回正在运行的线程的list

threading.activeCount()返回正在运行线程的数量,与len(threading.enumerate())的结果一致

threading模块提供的类: 
Thread, Lock, Rlock, Condition, [Bounded]Semaphore, Event, Timer, local.

thread(group=None,target=None,name=None,args=(,),kwargs={})

thread.isAlive()

thread.setName()

thread.start()

thread.setDaemon()

thread.join()

多线程的event事件

import time
import threading
def do(event):print('start')event.wait()print('ending')
event_org=threading.Event()
for i in range(10):thr=threading.Thread(target=do,args=[event_org,])thr.start()
event_org.clear()
inp=input('请输入:')
if inp=='True':event_org.set()

threading.Event()的event事件的方法有

event_org.wait() 事件等待。

event_org.set()将事件设置成True,即是事件的开始。

event_org.clear()将事件停止参数设置成,False

event_org.isSet(True),默认是True,要是设置成False将其改成False就好

?????fork操作,调用一次返回两次?????疑问

进程间通信Queue

Queue是进程安全的队列

  相关解决方案