父进程创建线程子进程,子进程相当于父进程复制了一份,两个子进程的数据不共享。

两个线程共享同一份数据,同一个进程中的线程之间可以通行

一个线程可以控制和操作同一个进程里的其他线程,但是进程只能操作子进程

主线程和子线程是并发执行的,没有逻辑先后之分


1. 创建一个新的线程

import threading
def testrun(x):
    a = 1
    while True:
        a+=1
        print("task",a)

t1 = threading.Thread(target=testrun,args = (1,)) #注意, 方法不能加括号, 一个参数也应该加 逗号
t1.start()
View Code

2. 使用类创建线程

import threading
import time
class myThread(threading.Thread):
    def __init__(self,n):
        super(myThread,self).__init__()
        self.n = n

    def run(self):  #函数名必须为 run
        print("class task",self.n)
        time.sleep(2)
x1 = myThread(1)
x2 = myThread(2)

x1.start()
#x1.join()   #程序变成串行,等待x1执行结束
x2.start()
x1.join()    #=  wait()等待线程x1执行完成
x2.join()

3.  join()函数详解

     等待该线程执行结束才执行下一行代码,可以实现线程的串行

import threading
import time
def testrun(x):
    print("task",x)
    time.sleep(2)
start = time.time()
tastlist = []
for i in range(50):
    t1 = threading.Thread(target=testrun,args=(i,))
    tastlist.append(t1)
    t1.start()
for t in tastlist:     #每一个线程都join(),d等待最后一个线程执行结束
    t.join()
endtime = time.time()-start
print("end",endtime)

 4.  

threading.current_thread()  返回当前的线程
threading.active_count() 统计线程的个数

5. 守护线程
主线程退出后守护线程不管有没有执行完成,都要退出
设置应该放在 start()函数之前
t1 = threading.Thread(target=testrun,args = (1,)) #注意, 方法不能加括号, 一个参数也应该加 逗号
t1.setDaemon(True)  #将该线程设置为  守护线程
t1.start()
View Code

6. 全局锁,python代码同一时刻只有一个线程在运行