zoukankan      html  css  js  c++  java
  • 多线程模块:thread

    thread 常见用法如下:

    thread.start_new_thread(function, args):用于开启一个新的线程,接收两个参数,分别为函数和该函数的参数,相当于开启一个新的线程来执行这个函数,注意函数的参数必须是元组类型的,例子如下,开启两个线程同时输出声音和画面

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    
    import time
    import thread
    
    def fun(name, n):
        for i in range(n):
            print name, i
            time.sleep(1)
    
    thread.start_new_thread(fun, ('声音', 3))
    thread.start_new_thread(fun, ('画面', 3))
    
    time.sleep(3)    # 这里要停止几秒,否则没等线程执行完进程就退出了
    [root@localhost ~]$ python 1.py 
    画面 0
    声音 0
    画面 1
    声音 1
    画面 2
    声音 2

    thread.allocate_lock():用于创建一个锁对象,我们可以同时开启多个线程,但是在任意时刻只能有一个线程能在解释器运行,因此需要由全局解锁器(GIL)控制运行哪个线程

    锁对象的常用方法如下:

        lock = thread.allocate_lock()    创建一个锁对象
        lock.acquire()    锁上锁,当某个线程被锁上之后,会优先执行这个锁的内容,直到锁释放才会执行其他线程
        lock.locked()     查看锁的状态,如果已经被锁上了则返回True,否则返回False
        lock.release()    释放锁,必须先获得锁才能释放锁

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    
    import time
    import thread
    
    def fun(name, n, lock):
        for i in range(n):
            print name, i
            time.sleep(1)
        lock.release()
    
    lock = thread.allocate_lock()
    lock.acquire()
    thread.start_new_thread(fun, ('声音', 3, lock))
    thread.start_new_thread(fun, ('画面', 3, lock))
    
    while lock.locked():
        pass
    [root@localhost ~]$ python 1.py 
    画面 0
    声音 0
    画面 1
    声音 1
    画面 2
    声音 2

        

  • 相关阅读:
    Android简易注解View(java反射实现)
    android注解[Jake Wharton Butter Knife]
    Android渠道汇总
    SVN管理规范
    马上着手开发iOS应用程序一 todolist
    MVC记录
    OC中intValue要注意的地方
    将从数组中取到的字符串赋值给了UIImage导致的错误
    一个null引发的错误
    记录一些容易忘记的属性 -- UITabBarController
  • 原文地址:https://www.cnblogs.com/pzk7788/p/10353953.html
Copyright © 2011-2022 走看看