python 命令行参数处理,python 命令行参数是什么
这次是用python作为多线程的串口基础库,所以总结这部分。实际使用后,我又回到python的官方帮助文档,学到了很多东西。把你认为有用的重点翻译出来,留待以后考察。
线程是线程的高级接口模块,除了线程模块之外,还包括多模块、队列模块和dummy_threading模块。
该模块定义了函数和对象,例如:
Threading.activeCount(:返回当前活动线程的数量。返回的数字等于枚举数(列表的长度)。
穿线。Condition():它是一个工厂函数(返回对象的函数),返回一个新的条件变量类型。condition类型的变量允许您等待一个或多个线程通知另一个线程。
Threading.currentThread(:根据用户的线程句柄返回当前线程对象。如果线程句柄不是在线程模块中创建的,将会创建一个功能有限的虚拟线程。
Threading.enumerate(:返回所有活动线程对象的列表。它包含守护线程、current_thread()创建的虚拟线程和主线程。不要包括已完成和未启动的线程。
穿线。Event(:返回新类型事件的工厂函数。事件管理标识符。您可以使用set()方法将其设置为true,或者使用clear()方法将其重置为false。Wait))方法将阻塞,直到该标志为真。
Class threading.local:表示线程本地数据的类。线程本地数据特定于该线程。您可以创建一个本地实例来管理线程本地数据并存储其属性。例如:
mydata=threading.local(
mydata.x=1
该属性的值因线程而异。
穿线。Lock(:是一个工厂函数,返回一个新的锁对象。当一个线程获得锁时,其他获得锁的线程将被阻塞,直到锁被释放。任何线程都可以释放它。
例如:
testLock=线程。锁定(
还可以使用with testLock代替test lock。acquire(# lock使用acquire)和release:
自我。_test=True
testLock.release(
(注意:排他锁用于锁定不同线程中的排他量。锁的内容尽量简洁,只锁必须独占的部分,从而节省线程的执行时间。)
穿线。RLock(:返回一个重新锁定工厂函数。可重新读取的锁必须由创建它的线程释放。一旦一个线程获得了一个可重新读取的锁,它就可以在同一个线程中继续获得它而不会阻塞。线程获得了几个可重入的锁。必须释放相同的次数。
在这个项目实践中,不使用重锁,但是即使同一个线程在锁的中间调用的函数中使用了同一个锁,使用单锁时也会出现死锁,而使用重锁时不会出现阻塞。)
Threading.semaphore([value]):这是一个工厂函数,返回一个新的信号量对象。信号量通过调用release(从要获取的调用数中)来管理表示初始值之和的计数器。如果这个值是负数,那么acquire()方法将被阻塞。value的默认值为1。
(当时系统分析师对信号量有抽象的理解,但实际上控制了线程同步和独占的数量。最初创造这个概念的科学家用p)和v))而不是acquire(和release)。管理信号量的内部计数器,每次调用(获取)递减,每次调用(释放)递增。此计数器不能小于0。如果调用acquire()时发现小于0,则该线程将在调用其他线程(release)之前被阻塞。)
类线程。Thread:表示线程句柄的类。
线程化用于提供与线程相关的操作,线程是APP应用中运行的最小单元。当前版本的python多线程库不实现优先级、线程组,不能停止、暂停、恢复或中断线程。
Thread是一个线程类,有两种用法。引入直接执行的方法(推荐,简单),或者继承和重写(从线程到运行)。创建线程对象后,必须调用线程的start()方法来启动线程。这将启动每个线程的run))方法。当线程启动时,该线程将被视为活动线程。它的run))方法结束,线程也将结束。或者,它通常会触发未处理的异常。您可以使用is_alive()方法来确定线程是否处于活动状态。
其他线程可以调用一个线程的join(方法)。这将阻塞当前上下文中的线程,直到调用该方法的线程结束。
线程可以被识别为“守护线程”。如果所有子线程都是守护进程,当主线程终止时,所有子线程也将终止。优雅的结束方法是引入事件来抛出异常。
class threading . thread(group=None,target=None,name=None,args=(),kwargs={})
Pgroup:必须为none,为后续扩展应用预留。
目标:被调用的函数对象。
名称:线程名称;默认情况下可以留空;它将由系统自动创建。
Args:调用函数对象的参数是祖先类型。
Kwargs:函数参数,它是一个字典类型。
如果子类重载了这个构造函数,那么构造函数(thread。__init__())必须在子类中显式调用,然后才能在此线程上操作。
Start():每个线程中最多只能调用一次,否则会抛出运行错误。
Run():在子类中重载该方法。
Join([timeout]):等到线程结束。这会阻塞当前上下文的线程,直到调用此方法的线程终止或超时。
(因此,只有当所有子线程结束时,主线程才会结束)
IsAlive():返回线程是否处于活动状态。
Daemon:线程启动start()之前必须调用setDaemon(),否则会抛出运行错误异常。
条件对象:条件对象通常与某种锁相关联。条件变量有acquire()和release()方法,可以调用相应的锁。还有wait()方法、notify()方法和notifyall()方法,但这三个方法必须在获取锁之后进行,否则会抛出运行错误异常。
class threading . condition([lock]):如果给定了参数Lock,则它必须是Lock或r lock的对象。
Acquire(*args):获取一个基本锁。
Release():释放锁
Wait([timeout]):等待,直到收到通知或超时。如果线程在没有获得锁的情况下调用这个方法,它将抛出一个运行错误异常。
该消息将释放基本锁,然后阻塞,直到另一个线程中的相同条件变量被notify或notifyAll()唤醒。一旦它醒来或者超时,就会重新获取锁并归还(这是一个拗口的说法,意思是“我累了,休息一下,你可以先用资源”。然后,您必须等待获得锁的其他线程,并调用条件变量的notify或nofityAll方法来唤醒原来等待的线程并继续执行。
如果锁是可重入锁,那么它不能被release方法释放,因为当它已经被锁定多次时,它可能不会真正解锁该锁。但使用了可以重新入锁的内部接口,即使多次获取锁也能真正解锁。
Notify(n=1):默认情况下,唤醒一个等待状态变量。
事件:这是线程间最简单的通信机制之一:一个线程释放一个事件,而其他线程捕捉它。
事件对象管理内部标识,可以通过set()方法将其设置为true,或者通过clear()方法将其设置为false。wait()方法会一直阻塞,直到ID为True。默认情况下为False
Set():将这个ID设置为True。所有等待它为真的线程都将被唤醒。一旦ID为真,调用wait()的线程将不会再次阻塞。
Clear():将该标志设置为false。相应地,调用wait的线程将阻塞,直到调用set方法将标志设置为true。
Wait():当内部ID为真时阻塞。如果内部ID一开始就是真的,就直接返回。否则,它将阻止其他线程调用se()将标志设置为true,或者直到可选超时发生。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。