线程,进程

#线程

#多线程:就是多个人给你干活
#多线程中,指定运行的那个函数的返回值是获取不到的
import threading,time
def a(num):
    time.sleep(1)
    # print(num)
for i in range(10):
    t=threading.Thread(target=a,args=(i,),name='hh')
    #target是要运行的函数,args是函数中要传入的参数,(传入的参数必须是元组(可迭代))如果没有参数,args可以不写,如果传入的参数是个字典就用kwargs={}
    # name是设置线程的名称
    # threading.current_thread().getName()  获取改该线程的名称
    t.start()

# print(time.strftime("%Y%m%d%h:%M:%S"))
# print('game over')
#此时页面中有11个线程
#10 在执行a #子线程
#1 个继续往下执行代码 #主线程

#程序一运行,先有个主线程
#主线程循环创建了10个子线程,(子线程再去执行函数,但主线程创建完这10个子线程后不会等待子线程执行函数,而是直接往循环下面继续执行代码)
#主线程继续往下执行代码

urls=['www.baidu.cn']
objs=[] #存放子线程
def write_html(url,name):
    import requests
    r=requests.get(url)
    with open(name,'w',encoding='utf-8') as fw:
        fw.write(r.text)
for url in urls:
    new_url='http://'+url
    file_name=url+'.html'
    # print(url)
    # print(file_name)
    t=threading.Thread(target=write_html,args=(new_url,file_name))
    t.start()
    # t.join() #等待(主线程遇到join等待子线程运行完,主线程再往下执行代码,此处等待会影响速度)

#将所有的子线程保存到一个list中循环list在.join()等待就不会影响运行速度
for obj in objs: #循环线程并等待,让子线程都执行完成后主线程再往下走
    obj.join()

# addr('http://bbs.besttest.cn','besttest.cn.html')

 

#守护线程

#守护线程的意思就是主线程死l(执行完了),子线程无论是否运行完都要死(结束)
import time,threading
def test():
    time.sleep(2)
    print('haha')
for i in range(10):
    t=threading.Thread(target=test)
    t.setDaemon(True) #设置守护线程
    t.start()

 

#锁

#
from threading import Lock
import threading
a=0
lock=Lock() #申请一把锁
def test():
    global a
    lock.acquire() #加锁
    a+=1
    lock.release()
#多线程处理一个任务时多次操作一个变量

for i in range(10):
    t=threading.Thread(target=test)
    t.start()
print(a)

 

#进程‘

from multiprocessing import Process

import time


def test(i):
        time.sleep(2)
        print(i)
if __name__=='__main__': #必须要写在这个if里面不然报错,锁、join方法都有
    for i in range(10):
        p=Process(target=test,args=(i,))
        p.start()

 

posted @ 2019-08-13 15:53  刘淑贤  阅读(86)  评论(0编辑  收藏  举报