2018-03-21

今天主要学习了多线程和计算机网络基础

多线程

  • 调用:from threading import Thread

多进程的调用:from multiprocessing import Process,
使用多进程的时机: 入股哦多个任务之间没有任何的关联(独立子任务)而且希望利用好CPU的多核特性,那么我们推荐使用多进程。

  • 使用方法:run(): 用以表示线程活动的方法。
    start():启动线程活动。
    join([time]): 等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。
  • 多线程的保护:#当多个线程同时访问一个资源的时候,就有可能因为竞争资源导致资源的状态错误;被多个线程访问的资源我们通常称之为临界资源,对临界资源的访问需要加上保护,我们使用锁进行操作。
        if money > 0:
            self._lock.acquire() # 获得锁
            try:
                new_balance = self._balance + money
                time.sleep(0.01)
                self._balance = new_balance
            finally:
                self._lock.release()

实例

import time
from random import randint
from threading import Thread

class Download(Thread):
    def __init__(self, filenname):
        self._filename = filenname
        super().__init__()
    # 钩子函数/回调函数(callback)
    # 知道这个事,但是不知道事情什么时候会真正的触发
    # 启动线程只能调用start,而不能直接调用run
    def run(self):
        download(self._filename)


def download(filename):
    print('开始下在%s文件' % filename)
    delay = randint(1, 5)
    time.sleep(delay)
    print('下载完成%s, 用时%d秒' % (filename, delay))

def main():
    # 多线程的写法
    start = time.time()
    t1 = Download('puthon从入门到住院')
    t1.start()
    t2 = Download('诛仙')
    t2.start()
    t1.join()
    t2.join()
    # p1 = Process(target=download, args=('python从入门到住院。pdf', )) #多进程的写法
    # p1.start()
    # p2 = Process(target=download, args=('peking hot', ))
    # p2.start()
    # p1.join()  # 等待进程结束(新方法)
    # p2.join()
    end = time.time()
    print('总共用了多少%d秒' % (end - start))


if __name__ == '__main__':
    main()

你可能感兴趣的:(2018-03-21)