【python学习】多线程编程

多线程:

Python的标准库提供了两个模块:thread和threading,thread是低级模块,threading是高级模块,对thread进行了封装。绝大多数情况下,我们只需要使用threading这个高级模块。

一、启动一个线程就是把一个函数传入并创建Thread实例,然后调用start()开始执行:

一个例子:

import time,threading

def loop():
  print ‘thread %s is running...‘ % threading.current_thread().name
  for n in range(0,5):
    print ‘thread %s ----> %s‘ % (threading.current_thread().name, n)
    time.sleep(1)
  print ‘thread %s end...‘ % threading.current_thread().name

print ‘thread %s is running...‘ % threading.current_thread().name
t0 = threading.Thread(target = loop, name=(‘Thread%s‘ % 0))
t1 = threading.Thread(target = loop, name=(‘Thread%s‘ % 1))
t0.start()
t1.start()
t0.join()
t1.join()
print ‘thread %s end...‘ % threading.current_thread().name

二、一个没有同步锁机制的多线程,最终的balance数值会不是0

import time, threading

balance = 0

def change_it(n):
  #xian chun hou qu, jie guo ying gai shi 0
  global balance
  balance = balance + n
  balance = balance - n

def run_thread(n):
  for i in range(10000):
    change_it(n)

t0 = threading.Thread(target=run_thread, args=(57,))
t1 = threading.Thread(target=run_thread, args=(86,))
t0.start()

t1.start()
t0.join()
t1.join()
print balance

三、同步锁机制

import time, threading

balance = 0

def change_it(n):
  #xian chun hou qu, jie guo ying gai shi 0
  global balance
  balance = balance + n
  balance = balance - n

##创建一个锁就是通过threading.Lock()来实现
lock = threading.Lock()

def run_thread(n):
  for i in range(10000):
    lock.acquire()
    try:
      change_it(n)
    finally:
      lock.release()

t0 = threading.Thread(target=run_thread, args=(57,))
t1 = threading.Thread(target=run_thread, args=(86,))
t0.start()

t1.start()
t0.join()
t1.join()
print balance
时间: 2024-07-31 18:20:42

【python学习】多线程编程的相关文章

【python】多线程编程

使用多线程编程和一个共享的数据结构如queue,这种程序任务可以用多个功能单一的线程来组织: UserRequestThread:负责读取客户的输入,可能是一个I/O信道.程序可能创建多个线程,每个客户一个,请求会被放入队列中 RequestProcessor:一个负责从队列中获取并处理请求的线程,它为下面那种线程提供输出 ReplyThread:负责把给用户的输出取出来,如果是网络应用程序就把结果发送出去,否则就保存到本地文件系统或数据库中. 一个顺序执行单线程的例子: from time i

Python学习---网络编程 1217[all]

OSI七层模型: 物理层, 数据链路层, 网络层,传输层,会话层,表达层,应用层 应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 传输层:TCP,UDP 网络层:IP,ICMP,OSPF,EIGRP,IGMP 数据链路层:SLIP,CSLIP,PPP,MTU [图片来自网络] 网络通信要素: A:IP地址    (1) 用来标识网络上一台独立的主机 (2) IP地址 = 网络地址 + 主机地址(网络号:用于识别主机所在的网络/网段.主机号:用于识别该网络中的主

python学习——多线程

多任务可以由多进程完成,也可以由一个进程内的多线程完成. 我们前面提到了进程是由若干线程组成的,一个进程至少有一个线程. 由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python的线程是真正的Posix Thread,而不是模拟出来的线程. Python的标准库提供了两个模块:_thread和threading,_thread是低级模块,threading是高级模块,对_thread进行了封装.绝大多数情况下,我们只需要使用thread

Python的多线程编程

提到多线程,很多人就会望而却步,本文将由浅入深地带你攻克python多线程编程,并防止你跳入深坑, 首先看一段简单的代码: 1 from time import ctime,sleep 2 def play_video(video): 3 for i in range(2): 4 print "i am playing video: %s at %s"%(video,ctime()) 5 sleep(4) 6 7 8 def play_music(music): 9 for i in

python学习 —— 多线程发送请求测试服务器压力

以前写过的python多线程终于派上用场了,其实还没开始测试,但下周会使用这个脚本测试一下,虽然boss让我用C++来做: # coding=utf-8 import random import string import threading import time from requests import post class MultiThread(threading.Thread): def __init__(self, url, qlock): threading.Thread.__in

Python threading多线程编程示例

Python 的多线程有两种实现方法: 函数,线程类 1.函数 调用 thread 模块中的 start_new_thread() 函数来创建线程,以线程函数的形式告诉线程该做什么 # -*- coding: utf-8 -*- import thread def f(name): #定义线程函数 print "this is " + name if __name__ == '__main__': thread.start_new_thread(f, ("thread1&qu

Python学习 : Socket编程

Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用[打开][读写][关闭]模式来操作.socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO.打开.关闭) socket和file的区别: file模块是针对某个指定

Python 学习——多线程

使用Threading模块创建线程: threading模块有Thread类实现threading.Thread类提供的方法如下: run():线程的入口点 start():调用run方法启动线程 join(time):等待线程结束 isAlive():检查一个线程是否仍旧在执行 getName():返回线程的名字 setName():设置一个线程的名字 要使用threading模块实现一个新线程,你得先如下做: 定义Thread类的一个子类. 重写__init__(self,[,args])方

python学习-网络编程

socket socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯. socket 与 file 的却别: file 是对指定文件进行打开,读写,关闭 socket 是对服务器和客户端的 socket 进行打开,读写,关闭 一.socket 客户端与服务器交互流程 简单实例 服务端将客户端发送的字符串转成大写后再返回给客户端 import socket sk = socket.socket()

带你学习多线程编程

线程概念 定义 线程就是进程内部的执行流,一个进程至少有一个线程,线程拥有自己的私有资源同时也会和进程共享资源. 线程独有的资源 线程描述符 寄存器 线程栈 errno 信号掩码 实时调度策略 线程和进程共享的资源 全局变量 堆 代码段 文件描述符表 进程ID和组ID 每种信号的处理方式 当前工作目录 线程和进程的区别 线程是资源调度的最小单位 ,进程时资源分配的最小单位 进程是一次程序运行活动,线程是进程中的一个执行路径 进程之间不能共享资源,而线程共享所在进程的地址空间和其它资源.同时线程还