zoukankan      html  css  js  c++  java
  • Python学习笔记--多进程和多线程

    """多进程和多线程"""
    #  顺序执行
    # from random import randint
    # from time import time, sleep
    #
    #
    # def download_task(filename):
    #     print('开始下载%s...' % filename)
    #     time_to_download = randint(5, 10)
    #     sleep(time_to_download)
    #     print('%s下载完成! 耗费了%d秒' % (filename, time_to_download))
    #
    #
    # def main():
    #     start = time()
    #     download_task('Python从入门到住院.pdf')
    #     download_task('Peking Hot.avi')
    #     end = time()
    #     print('总共耗费了%.2f秒.' % (end - start))
    #
    # # 开始下载Python从入门到住院.pdf...
    # # Python从入门到住院.pdf下载完成! 耗费了10秒
    # # 开始下载Peking Hot.avi...
    # # Peking Hot.avi下载完成! 耗费了9秒
    # # 总共耗费了19.02秒.
    # if __name__ == '__main__':
    #     main()
    
    
    # 并行执行
    # from multiprocessing import Process
    # from os import getpid
    # from random import randint
    # from time import time, sleep
    #
    #
    # def download_task(filename):
    #     print('启动下载进程,进程号[%d].' % getpid())
    #     print('开始下载%s...' % filename)
    #     time_to_download = randint(5, 10)
    #     sleep(time_to_download)
    #     print('%s下载完成! 耗费了%d秒' % (filename, time_to_download))
    #
    # # #启动下载进程,进程号[9080].
    # # 开始下载Peking Hot.avi...
    # # 启动下载进程,进程号[12668].
    # # 开始下载Python从入门到住院.pdf...
    # # Python从入门到住院.pdf下载完成! 耗费了6秒
    # # Peking Hot.avi下载完成! 耗费了8秒
    # # 总共耗费了8.40秒.
    # def main():
    #     start = time()
    #     p1 = Process(target=download_task, args=('Python从入门到住院.pdf', ))
    #     p1.start()
    #     p2 = Process(target=download_task, args=('Peking Hot.avi', ))
    #     p2.start()
    #     p1.join()
    #     p2.join()
    #     end = time()
    #     print('总共耗费了%.2f秒.' % (end - start))
    #
    #
    # if __name__ == '__main__':
    #     main()
    
    # 用多线程
    # from random import randint
    # from threading import Thread
    # from time import time, sleep
    #
    #
    # def download(filename):
    #     print('开始下载%s...' % filename)
    #     time_to_download = randint(5, 10)
    #     sleep(time_to_download)
    #     print('%s下载完成! 耗费了%d秒' % (filename, time_to_download))
    #
    #
    # def main():
    #     start = time()
    #     t1 = Thread(target=download, args=('Python从入门到住院.pdf',))
    #     t1.start()
    #     t2 = Thread(target=download, args=('Peking Hot.avi',))
    #     t2.start()
    #     t1.join()
    #     t2.join()
    #     end = time()
    #     print('总共耗费了%.3f秒' % (end - start))
    # # 开始下载Python从入门到住院.pdf...
    # # 开始下载Peking Hot.avi...
    # # Peking Hot.avi下载完成! 耗费了5秒
    # # Python从入门到住院.pdf下载完成! 耗费了9秒
    # # 总共耗费了9.008秒
    #
    # if __name__ == '__main__':
    #     main()
    
    # 自定义多线程
    from random import randint
    from threading import Thread
    from time import time, sleep
    
    
    # class DownloadTask(Thread):
    #
    #     def __init__(self, filename):
    #         super().__init__()
    #         self._filename = filename
    #
    #     def run(self):
    #         print('开始下载%s...' % self._filename)
    #         time_to_download = randint(5, 10)
    #         sleep(time_to_download)
    #         print('%s下载完成! 耗费了%d秒' % (self._filename, time_to_download))
    #
    #
    # def main():
    #     start = time()
    #     t1 = DownloadTask('Python从入门到住院.pdf')
    #     t1.start()
    #     t2 = DownloadTask('Peking Hot.avi')
    #     t2.start()
    #     t1.join()
    #     t2.join()
    #     end = time()
    #     print('总共耗费了%.2f秒.' % (end - start))
    #
    # # 开始下载Python从入门到住院.pdf...
    # # 开始下载Peking Hot.avi...
    # # Peking Hot.avi下载完成! 耗费了5秒
    # # Python从入门到住院.pdf下载完成! 耗费了10秒
    # # 总共耗费了10.01秒.
    # if __name__ == '__main__':
    #     main()
    
    from time import sleep
    from threading import Thread,Lock
    
    
    class Account(object):
    
        def __init__(self):
            self.lock = Lock()
            self._balance = 0
    
        def deposit(self, money):
            self.lock.acquire()
            try:
                # 计算存款后的余额
                new_balance = self._balance + money
                # 模拟受理存款业务需要0.01秒的时间
                sleep(0.01)
                # 修改账户余额
                self._balance = new_balance
                # self.lock.release()
            finally:
                self.lock.release()
        @property
        def balance(self):
            return self._balance
    
    
    class AddMoneyThread(Thread):
    
        def __init__(self, account, money):
            super().__init__()
            self._account = account
            self._money = money
    
    
        def run(self):
    
            self._account.deposit(self._money)
    
    
    
    def main():
        account = Account()
        threads = []
        # 创建100个存款的线程向同一个账户中存钱
        for _ in range(100):
            t = AddMoneyThread(account, 1)
            threads.append(t)
            t.start()
        # 等所有存款的线程都执行完毕
        for t in threads:
            t.join()
        print('账户余额为: ¥%d元' % account.balance)
    
    
    if __name__ == '__main__':
        main()
  • 相关阅读:
    加载spring容器
    id生成工具类
    Spring基础之 反射(Reflection)
    XML解析之dom4j
    我的集合学习笔记--LinkedList
    验证身份证号的正确性
    String系列-----AbstractStringBuilder
    String系列-----String
    Java设计模式-迭代器模式
    Servlet的三个域对象
  • 原文地址:https://www.cnblogs.com/jifeng0902/p/14723036.html
Copyright © 2011-2022 走看看