python线程编程

1、线程模式代码

#!/usr/bin/python
#_*_coding:utf-8_*_

import threading
import time

def Producer():

    print ‘chef : 等人来买包子。。。‘
    event.wait()
    event.clear()

    print ‘sb is coning for baozi...‘

    print ‘chef : making a baozi for sb...‘
    time.sleep(3)

    print ‘chef : 你的包子好了‘
    event.set()

def Consumer():

    print ‘maxi : 去买包子‘
    event.set()

    time.sleep(1)
    print ‘maxi : waiting for baozi tobe readly‘
    event.wait()

    print ‘哎呀,真好吃‘

event = threading.Event()

p = threading.Thread(target=Producer)
c = threading.Thread(target=Consumer)

p.start()
c.start()

运行结果:

2、怎样调用自己的线程类

代码如下:

#!/usr/bin/python
#_*_coding:utf-8_*_

from threading import Thread
import time

class MyThread(Thread):  #调用我自己的线程方法前,必须先调用父类的run()方法;
    def run(self):
        print ‘myThread‘
        #Thread.run(self) #启用父类的run(),只有这样才能调用自己的线程函数
        super(MyThread, self).run()
def Bar():
    print ‘bar‘,

t1 = MyThread(target = Bar)  #我的线程方法Bar()函数;
t1.start()
print ‘over‘

运行结果:

3、线程安全

代码如下:

#!/usr/bin/python
#_*_coding:utf-8_*_

import threading
import time

num = 0 

def run(n): 
    time.sleep(1)
    samp.acquire()  #锁上

    global num 
    num += 1
    print ‘%d\n‘ % num 
    samp.release()  #释放锁

#lock = threading.Lock()  #锁机制,
samp = threading.BoundedSemaphore(4) #信号量

for i in range(1000):
    t = threading.Thread(target = run, args = (i,))
    t.start()

因为上面给了4个信号量,就是可以同时最多有4个进程抢占资源;

运行结果:

当我们把信号量改为1时,就相当于独占,此时结果肯定就是1000了;

时间: 2024-08-03 14:21:17

python线程编程的相关文章

[ Python - 14 ] python进程及线程编程

什么是进程: 简单来讲,进程就是操作系统中运行的程序或任务,进程和程序的区别在于进程是动态的,而程序是静态的.进程是操作系统资源管理的最小单位. 什么是线程: 线程是进程的一个实体,是cpu调度和分派的最小单位,它是比进程更小的能独立运行的基本单位,线程本身不拥有资源,但它可以与同属于一个进程的线程共享进程的资源所拥有的全部资源. python多线程编程与GIL: 为了更有效的利用多核处理,就出现了多线程编程,但是问题是线程间数据的一致性和状态的同步如果得到保证,因此python解析器引入了GI

使用 Python 进行线程编程

w 使用 Python 进行线程编程https://www.ibm.com/developerworks/cn/aix/library/au-threadingpython/index.html import threading import datetime class ThreadClass(threading.Thread): def run(self): now = datetime.datetime.now() print "%s says Hello World at time: %

使用Python进行线程编程

对于Python来说,并不缺少并发选项,其标准库包括了对线程.进程和异步I/O的支持.在许多情况下,通过创建诸如异步.线程和子进程之类的高层模块,Python简化了各种并发方法的使用.除了标准库之外,还有一些第三方的解决方案.例如Twisted.Stackless和进程Module.因为GIL,CPU受限的应用程序无法从线程中受益.使用Python时,建议使用进程,或者混合创建进程和线程. 首先弄清楚进程和线程的区别.线程和进程的不同之处在于,它们共享状态.内存和资源.对于线程来说,这个简单的区

python网络编程基础(线程与进程、并行与并发、同步与异步)

python网络编程基础(线程与进程.并行与并发.同步与异步) 目录 线程与进程 并行与并发 同步与异步 线程与进程 进程 前言 进程的出现是为了更好的利用CPU资源使到并发成为可能. 假设有两个任务A和B,当A遇到IO操作,CPU默默的等待任务A读取完操作再去执行任务B,这样无疑是对CPU资源的极大的浪费.聪明的老大们就在想若在任务A读取数据时,让任务B执行,当任务A读取完数据后,再切换到任务A执行.注意关键字切换,自然是切换,那么这就涉及到了状态的保存,状态的恢复,加上任务A与任务B所需要的

Python并发编程05/ 死锁/递归锁/信号量/GIL锁/进程池/线程池

目录 Python并发编程05/ 死锁/递归锁/信号量/GIL锁/进程池/线程池 1.昨日回顾 2.死锁现象与递归锁 2.1死锁现象 2.2递归锁 3.信号量 4.GIL全局解释器锁 4.1背景 4.2为什么加锁 5.GIL与Lock锁的区别 6.验证计算密集型IO密集型的效率 6.1 IO密集型 6.2 计算密集型 7.多线程实现socket通信 7.1服务端 7.2客户端 8.进程池,线程池 Python并发编程05/ 死锁/递归锁/信号量/GIL锁/进程池/线程池 1.昨日回顾 #生产者消

Python并发编程—线程

线程编程(Thread) 线程基本概念 1.什么是线程[1] 线程被称为轻量级的进程[2] 线程也可以使用计算机多核资源,是多任务编程方式[3] 线程是系统分配内核的最小单元[4] 线程可以理解为进程的分支任务 2.线程特征[1] 一个进程中可以包含多个线程[2] 线程也是一个运行行为,消耗计算机资源[3] 一个进程中的所有线程共享这个进程的资源[4] 多个线程之间的运行互不影响各自运行[5] 线程的创建和销毁消耗资源远小于进程[6] 各个线程也有自己的ID等特征 threading模块创建线程

python核心编程--笔记

python核心编程--笔记 的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找python路径 1.4 –v   冗余输出(导入语句详细追踪) 1.5 –m mod 将一个模块以脚本形式运行 1.6 –Q opt 除法选项(参阅文档) 1.7 –c cmd 运行以命令行字符串心事提交的python脚本 1.8 file   以给定的文件运行python脚本 2 _在解释器中表示最后

python 网络编程 (二)---tcp

异常 python的socket模块实际上定义了4种可能出现的异常: 1)与一般I/O 和通信问题有关的socket.error; 2)与查询地址信息有关的socket.gaierror; 3)与其他地址错误有关的socket.herror; 4)与在一个socket上调用settimeout()后,处理超时有关的socket.timeout; import socket, sys, time host = sys.argv[1] textport = sys.argv[2] filename

python并发编程之多进程

python并发编程之多进程 一.什么是进程 进程:正在进行的一个过程或者一个任务,执行任务的是CPU. 原理:单核加多道技术 二.进程与程序的区别 进程是指程序的运行过程 需要强调的是:同一个程序执行两次是两个进程,比如打开暴风影音,虽然都是同一个软件,但是一个可以播放苍井空,另一个可以播放武藤兰. 三.并发与并行 无论是并行还是并发,在用户看来都是'同时'运行的,不管是进程还是线程,都只是一个任务而已,真是干活的是cpu,cpu来做这些任务,而一个cpu同一时刻只能执行一个任务. (1)并发