老师的博客地址:http://www.cnblogs.com/Eva-J/articles/8306047.html
multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,因而不再详细介绍(官方链接)
from threading import Thread def fun1(n): a=40 print(n,'i am the 1 thread') print('i am fun1 a:',a) class fun2(Thread): a = 40 print(a) def __init__(self,n): super(fun2, self).__init__() self.n=n def run(self): print(self.n,'i am the 2 thread ') print('i am fun2 a:', self.a,a) a=100 func1=Thread(target=fun1,args=(1,)) func1.start() func2=fun2(2) func2.start() print(a) '''发现子线程的变量不与主线程共享,除非声明了global 如果子线程没有便用主线程的 另外如果主线程和子线程都有某个变量,在子线程没有声明的情况下不要去使用 这个变量'''
# 进程 是 最小的 内存分配单位
# 线程 是 操作系统调度的最小单位
# 线程直接被CPU执行,进程内至少含有一个线程,也可以开启多个线程
# 开启一个线程所需要的时间要远远小于开启一个进程
# 多个线程内部有自己的数据栈,数据不共享
# 全局变量在多个线程之间是共享的
# GIL锁(即全局解释器锁)
# 在Cpython解释器下的python程序 在同一时刻 多个线程中只能有一个线程被CPU执行
# 高CPU : 计算类 --- 高CPU利用率
# 高IO : 爬取网页 200个网页
# qq聊天 send recv
# 处理日志文件 读文件
# 处理web请求
# 读数据库 写数据库
import threading
import os
import time
def fun(n):
time.sleep(1)
n+=1
print(threading.get_ident(),threading.current_thread(),os.getpid())
for i in range(10):
t=threading.Thread(target=fun,args=(i,))
t.start()
print(threading.get_ident(),threading.current_thread(),os.getpid())#查看线程号的,查看当前线程的名字,查看进程号
print(threading.active_count())#查看当前还活着的线程号的个数
print(threading.enumerate())#查看当前还活着的线程号的名字,返回其列表
#threadingactive_count(),threading.enumerate()是查看现在还运行的线程,如果函数不睡上一秒的话,返回值就是1和元素为1的列表了
利用线程实现多人聊天
server端
import socket import threading server=socket.socket() ip_port=('192.168.43.155',8899) server.bind(ip_port) def chat(client, address): while 1: message=client.recv(1024).decode('utf-8') if message=='bye': break print('