今天主要学习了多线程和计算机网络基础
多线程
- 调用: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()