Menu
Woocommerce Menu

关于拉姆da表明式的精通,二十多线程及进度

0 Comment

threading使用

import threadingfrom time import sleep, ctimeloop = [4, 2]class ThreadFunc:    def __init__(self, name):        self.name = name    def loop(self, nloop, nsec):        '''        :param nloop: loop函数的名称        :param nsec: 系统休眠时间        :return:        '''        print('Start loop ', nloop, 'at ', ctime        sleep        print('Done loop ', nloop, ' at ', ctimedef main():    print("Starting at: ", ctime    # ThreadFunc("loop").loop 跟一下两个式子相等:    # t = ThreadFunc("loop")    # t.loop    # 以下t1 和  t2的定义方式相等    t = ThreadFunc("loop")    t1 = threading.Thread( target = t.loop, args=("LOOP1", 4))    # 下面这种写法更西方人,工业化一点    t2 = threading.Thread( target = ThreadFunc('loop').loop, args=("LOOP2", 2))    # 常见错误写法    #t1 = threading.Thread(target=ThreadFunc('loop').loop    #t2 = threading.Thread(target=ThreadFunc('loop').loop    t1.start()    t2.start()    t1.join    t2.join()    print("ALL done at: ", ctimeif __name__ == '__main__':    main()

输出>>>

Starting at: Sun Sep 2 10:04:47 2018
Start loop LOOP1 at Sun Sep 2 10:04:47 2018
Start loop LOOP2 at Sun Sep 2 10:04:47 2018
Done loop LOOP2 at Sun Sep 2 10:04:49 2018
Done loop LOOP1 at Sun Sep 2 10:04:51 2018
ALL done at: Sun Sep 2 10:04:51 2018

分析:注意:实例化时threading.Thread(target=xxx,
args=格式完整,工业风写法为init了的类的函数,args为其余param,一行搞定喵

  1. 可以通过设置守护线程,使不重要线程同主线程一同结束

    t1 = threading.Thread(target=fun, args=# 社会守护线程的方法,必须在start之前设置,否则无效t1.setDaemon#t1.daemon = Truet1.start()
    
  2. threading.Lock()的两个线程,竞争资源都acquire(),造成无法release(),最后无法继续程序。

  3. threading.Semaphoren=允许同时运行线程数

  4. threading.Timer指定时间开始线程

  在.NET
1.0的时候,大家都知道我们经常用到的是委托。有了委托呢,我们就可以像传递变量一样的传递方法。在一定程序上来讲,委托是一种强类型的托管的方法指
针,曾经也一时被我们用的那叫一个广泛呀,但是总的来说委托使用起来还是有一些繁琐。来看看使用一个委托一共要以下几个步骤:

题目描述

某人写了n封信和n个信封,如果所有的信都装错了信封。求所有信都装错信封共有多少种不同情况。

多进程

  1. multiprocessing.Process()直接生成进程

  2. 创建子类生成:

    import multiprocessingfrom time import sleep, ctimeclass ClockProcess(multiprocessing.Process):    '''    两个函数比较重要    1. init构造函数    2. run    '''    def __init__(self, interval):        super().__init__()        self.interval = interval    def run:        while True:            print("The time is %s" % ctime            sleep(self.interval)if __name__ == '__main__':    p = ClockProcess    p.start()    while True:        print('sleeping.......')        sleep
    

    注意:

    1. __init__里用super().__init__

    2. 重写run()

    3. 可以用os.getppid()得到父进程id,用os.getpid()得到本进程id

    4. 建立进程:

      q = multiprocessing.JoinableQueue()# 运行消费者进程cons_p = multiprocessing.Process (target = consumer, args = cons_p.daemon = Truecons_p.start()
      

example:

import multiprocessingfrom time import ctimedef consumer:    print("Into consumer:", ctime    while True:        item = input_q.get()        if item is None:            break        print("pull", item, "out of q")    print("Out of consumer:", ctimedef producer(sequence, output_q):    for item in sequence:        print("Into procuder:", ctime        output_q.put        print("Out of procuder:", ctimeif __name__ == '__main__':    q = multiprocessing.Queue()    cons_p1 = multiprocessing.Process(target=consumer, args=    cons_p1.start()    cons_p2 = multiprocessing.Process (target=consumer, args=    cons_p2.start()    sequence = [1, 2, 3, 4]    producer(sequence, q)    q.put    q.put    cons_p1.join()    cons_p2.join()

Into procuder: Tue Sep 4 15:57:37 2018
Out of procuder: Tue Sep 4 15:57:37 2018
Into procuder: Tue Sep 4 15:57:37 2018
Out of procuder: Tue Sep 4 15:57:37 2018
Into procuder: Tue Sep 4 15:57:37 2018
Out of procuder: Tue Sep 4 15:57:37 2018
Into procuder: Tue Sep 4 15:57:37 2018
Out of procuder: Tue Sep 4 15:57:37 2018
Into consumer: Tue Sep 4 15:57:37 2018
pull 1 out of q
pull 2 out of q
pull 3 out of q
pull 4 out of q
Out of consumer: Tue Sep 4 15:57:37 2018
Into consumer: Tue Sep 4 15:57:37 2018
Out of consumer: Tue Sep 4 15:57:37 2018

分析:

  1. multiprocessing.Queue()建立一个进程间队列
  2. Queue.put()以及Queue.get()为队列操作,先进先出
  1. 用delegate关键字创建一个委托,包括声明返回值和参数类型
  2. 使用的地方接收这个委托
  3. 创建这个委托的实例并指定一个返回值和参数类型匹配的方法传递过去

输入输出格式

输入格式:

一个信封数n

输出格式:

一个整数,代表有多少种情况。

标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图