zoukankan      html  css  js  c++  java
  • 进程、线程

    multiprocessing

    from multiprocessing import Pool
    import os,time,random
    
    def long_time_task(name):
        print('run task %s (%s)...'% (name,os.getpid()))
        start = time.time()
        time.sleep(random.random()*3)
        end = time.time()
        print('task %s runs %0.2f seconds'% (name,(end-start)))
    
    if __name__ =='__main__':
        print('parent process %s '% os.getpid())
        p = Pool(4)
        for i in range(5):
            p.apply_async(long_time_task,args=(i,))
        print('waitng for all subprocesses done...')
        p.close()
        p.join()
        print('all subprocesses done')

     threading

    import time,threading
    
    def loop():
        print('thread %s is running...'% threading.current_thread().name)
        n = 0
        while n<5:
            n += 1
            print('thread %s >>>%s'%(threading.current_thread().name,n))
            time.sleep(1)
        print('thread %s ended'% threading.current_thread().name)
    print('thread %s is running...'% threading.current_thread().name)
    t = threading.Thread(target=loop,name='loopThread')
    t.start()
    t.join()
    print('thread %s ended'% threading.current_thread().name)

     lock

    import time,threading
    #假定这是银行存款
    balance = 0
    
    def change_it(n):
        #先存后取,结果应是0
        global balance
        balance += n
        balance -= n
    
    # def run_thread(n):
    #     for i in range(100000):
    #         change_it(n)
    #
    lock = threading.Lock()
    def run_thread(n):
        for i in range(100000):
            #先要获取锁
            lock.acquire()
            try:
                #可以放心改
                change_it(n)
            finally:
                #改完了一定要释放锁
                lock.release()
    
    #
    t1 = threading.Thread(target=run_thread,args=(5,))
    t2 = threading.Thread(target=run_thread,args=(8,))
    t1.start()
    t2.start()
    t1.join()
    t2.join()
    print(balance)
    View Code

     ThreadLocal

    import threading
    
    #创建全局ThreadLocal对象:
    local_school = threading.local()
    
    def process_student():
        #获取当前线程关联的student
        std = local_school.student
        print('hello %s (in %s)'%(std,threading.current_thread().name))
    
    def process_thread(val):
        #绑定ThreadLocal的student
        local_school.student = val
        process_student()
    
    t1 = threading.Thread(target=process_thread,args=('alice',),name='Thread-A')
    t2 = threading.Thread(target=process_thread,args=('bob',),name='Thread-B')
    t1.start()
    t2.start()
    t1.join()
    t2.join()
    View Code
    渐变 --> 突变
  • 相关阅读:
    Web开发人员必备工具-Emmet (Zen Coding)
    Zerver是一个C#开发的Nginx+PHP+Mysql+memcached+redis绿色集成开发环境
    jquery 插件站
    数据挖掘项目之---通过对web日志的挖掘来实现内容推荐系统
    类似wordpress的网站模板
    浅谈 SOAP
    在Livemedia的基础上开发自己的流媒体客户端 V 0.01
    模式识别之分类器knn---c语言实现带训练数据---反余弦匹配
    多项式相乘快速算法原理及相应C代码实现---用到fft
    模式识别之基础---常用分类算法特性归纳
  • 原文地址:https://www.cnblogs.com/lybpy/p/7862977.html
Copyright © 2011-2022 走看看