线程1

老师的博客地址: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('33[33ma message come from %s:33[0m'%str(address),message)
        info=input('33[32mreplay:33[0m').encode('utf-8')
        client.send(info)
    client.close()
while 1:
    server.listen()
    client, address = server.accept()
    t=threading.Thread(target=chat,args=(client, address))
    t.start()

client端

import socket
import threading

client=socket.socket()
ip_port=('192.168.43.155',8899)
client.connect(ip_port)
while 1:
    info = input('33[32mwath you want to say:33[0m').encode('utf-8')
    client.send(info)
    if info==b'bye':
        client.close()
    message=client.recv(1024).decode('utf-8')
    print(message)

聊是能聊,就是有点乱

 总结

# 正确的学习方法
    # input
    # output
    # correct 纠正

# 线程
    # 线程是进程中的执行单位
    # 线程是cpu执行的最小单位
    # 线城之间资源共享
    # 线程的开启和关闭以及切换的时间开销远远小于进程
    # 线程本身可以在同一时间使用多个cpu
# python 与 线程
    # Cpython解释器在解释代码过程中容易产生数据不安全的问题
    # GIL 全局解释器锁 锁的是线程
# threading

原文地址:https://www.cnblogs.com/accolade/p/10584371.html